2015-01-08 14 views
6

Sto attraversando un periodo difficile con perdite di memoria in un'app completamente sviluppata. C# con MVVM Light 5. Ho trascorso tutta la settimana a imparare come usare il profiler di memoria, a leggere i problemi di perdita di memoria, ecc. Ecc. Ho messo almeno 25 ore in questo problema. Cancella accuratamente tutti i gestori di eventi e annullo anche DataContext e LayoutRoot di ogni pagina dopo BackNavigation, nonché quando viene rilevata una navigazione circolare (memorizzo l'ultima istanza in esecuzione di una pagina in App.cs, quando un'altra istanza di quella pagina sta per essere creato, controllo se esisteva già un'istanza e, in tal caso, l'ho cancellata).Perdite di memoria massive WP8

Ho esaurito i miei sforzi e non so da dove andare.

Di seguito è riportato un collegamento a uno screenshot dell'analisi della memoria dopo aver navigato tra 2 pagine ripetutamente. Le istanze di ogni pagina non vengono liberate per qualche motivo, ma vengono ridotte a semplici byte.

enter image description here

Come si può vedere, la differenza tra le mie assegnazioni portati a nuovo e mantenuto visuali fin dall'inizio e alla fine è molto minore (circa 30 MB in totale).

Eppure nel grafico, vedo una differenza di quasi 100 MB.

Questo mi sta facendo impazzire, ho pensato che la piattaforma sottostante avrebbe fatto un lavoro migliore nella gestione di questo. Qualsiasi aiuto è molto apprezzato.

+0

Stai utilizzando le istanze di WebBrowser per caso? Ho dovuto rimuoverlo completamente dalla mia app perché mi dava delle perdite di memoria che non riuscivo a risolvere. – McGarnagle

+0

Potrebbe anche essere immagini –

+0

Grazie per la risposta ragazzi. Non sto utilizzando il controllo WebBrowser. Ho alcune foto, ma per saltare 100mb in soli 5 cicli di navigazione è un po 'troppo. L'immagine più grande (lo sfondo del panorama) è 400kb. Il resto è sotto i 10kb. –

risposta

0

con cura chiaro tutti i gestori di eventi, e anche nullo il DataContext e LayoutRoot di ogni pagina dopo BackNavigation

vi consiglio di un sistema di essere messo in atto riutilizzare le macchine virtuali è fatto e acquisisci solo nuovi dati se veramente necessari. Ho lavorato a un'applicazione di mappatura professionale, attualmente nel negozio WP, dove abbiamo creato solo gli elementi necessari e mai creato una VM due volte.

+0

Corretto, sto usando il Simple IOC fornito con MVVM Light che gestisce le mie istanze ViewModel. My ViewModels non vengono mai creati due volte. Quindi questa non può essere la fonte dei miei problemi. Grazie comunque! –