133 messaggi dal 31 ottobre 2003
Ho una web api che accede a MySQL attraverso NHibernate.
L'application pool arriva velocemente ad un giga dopo poche query.
Delle sessioni di NHibernate viene fatto regolarmente il Dispose
cosa posso controllare?

JK
Modificato da Jk il 01 dicembre 2015 15.21 -
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao,
per caso stai mettendo molte entità nella cache di secondo livello di NHibernate?

Per avere qualche indizio in più, dovresti mandare in debugging la tua applicazione da Visual Studio 2015 ed usare gli strumenti di diagnostica che appaiono sulla colonna di destra.
In particolare, guarda il grafico del consumo della memoria e fai qualche snapshot dalla scheda "Utilizzo memoria".
Per ogni snapshot che hai fatto, puoi vedere l'heap e capire su quale tipo di oggetto è stata allocata la maggior parte della memoria.
http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/13/memory-usage-tool-while-debugging-in-visual-studio-2015.aspx

ciao,
Moreno

Enjoy learning and just keep making
133 messaggi dal 31 ottobre 2003
Ciao, quando lancio da visual studio "prestazioni e diagnostica" ottengo il seguente errore: comando analyze.launch performance wizard non disponibile.

Comunque non ho ancora preso in considerazione la cache di secondo livello, che per default è disabilitata. Quello che posso dirti, è che ci sono alcune risposte dal webapi verso il client, in cui serializzo un record (un oggetto)
con parecchie dipendenze.
Ora però ho notato una cosa. Ci sono un paio di classi sul webapi che accedono al db con il dataconnection e il datacommand, ed ho notato che anche lanciando questi metodi l'application pool aumenta.

JK
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao,
ok, quindi il problema potrebbe essere in qualche oggetto di cui non viene fatto il Dispose. Dovresti riuscire ad aprire il pannello di diagnostica di cui parlavo perché da lì possiamo avere degli indizi più precisi.

Jk ha scritto:

ottengo il seguente errore: comando analyze.launch performance wizard non disponibile.

Mmmh, questo potrebbe essere relativo al performance wizard che non è lo stesso di cui ti parlavo. Si dovrebbe aprire automaticamente quando parte il debug con VS2015, ma lo puoi anche far apparire con CTRL+ALT+F2 o dal menu Debug -> Mostra strumenti di diagnostica.

ciao,
Moreno

Enjoy learning and just keep making
133 messaggi dal 31 ottobre 2003
Ciao, allora io uso Visual Studio 2013, ora sono riuscito a far partire lo strumento di diagnostica, ma appunto non è quello che dici te che è presente in VS2015. A me si è aperta una finestra sulla sinistra "Esplora prestazioni" con il nome del progetto (Campionamento) e due sottocartelle Destinazioni e rapporti, ma non ho capito come utilizzarlo e se mi è utile.

comunque sugli accessi con il data connection e data command, apro la connessione, faccio la query, chiudo la connessione con relativo dispose e faccio il response della collection attraverso la classe HttpResponseMessage

JK
11.885 messaggi dal 09 febbraio 2002
Contributi
Ciao,

Jk ha scritto:

io uso Visual Studio 2013

Ok, allora esiste una procedura manuale per analizzare gli oggetti nell'heap che trovi descritta qui:
http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/20/using-visual-studio-2013-to-diagnose-net-memory-issues-in-production.aspx

Con quella puoi andare vedere di che tipo sono questi oggetti che stanno occupando spazio in memoria.

ciao,
Moreno

Enjoy learning and just keep making
133 messaggi dal 31 ottobre 2003
Ciao purtroppo la tua soluzione è solamente per la Ultimate, io ho la professional.

JK
133 messaggi dal 31 ottobre 2003
Ciao, non riuscendo ancora ad avere una versione di visual studio che mi permetta di vedere gli oggetti in memoria, sto cercando di capire qualcosa attraverso gli strumenti di logging quale ad esempio la libreria log4net.

ho notato una cosa:

io ho un'oggetto OggettoA mappato con la TabellaA che ha una relazione many-to-one con l'oggetto OggettoB mappato sulla TabellaB

quando nella web api recupero un record della tabella A con

session.Get<OggettoB>(Id)

non volendo tornare al client la reference dell'Oggetto B, pongo OggettoA.OggettoB = null (ed infatti facendo l'inspector sul client, l'oggetto B non ce l'ho), poi serializzo ed invio al Client,

quello che noto dai log è che comunque lui fa la "select TabellaA.*, TabellaB.* froma TabellaA inner join TabellaB". E' possbile evitare questo senza usare il Transformers.AliasToBean?

Grazie

jk
Modificato da Jk il 04 febbraio 2016 17.50 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.