Rintraccia la perdita di memoria in WPF
-
03-07-2019 - |
Domanda
Contesto: Stiamo costruendo un framework per la consegna rapida delle applicazioni WPF. Questo framework utilizza Autofac come contenitore IoC e utilizza anche regioni di Prism v1. Stiamo programmando attività con estensioni parallele di Microsoft.
Stiamo affrontando il seguente problema: Quando avvieremo l'applicazione con viste vuote (quindi solo una shell con regioni e controlli segnaposto), la memoria rimarrà stabile per circa 60 secondi e successivamente aumenterà di circa ogni secondo con 4kb, quindi 4kb, quindi con 8kb. Quindi ogni 3 secondi abbiamo aggiunto 16Kb alla nostra pressione di memoria.
Cosa abbiamo provato a rintracciare la perdita. Ho iniziato usando dotTrace ma non sono riuscito a vedere alcuna differenza tra 2 istantanee distanti 30 minuti. Passato al profiler di memoria .NET perché mi dà più informazioni ma ancora non possiamo vedere alcuna differenza tra 2 istantanee. Possiamo vedere che un certo numero di oggetti viene creato ma anche loro vengono rimossi e si traduce in un delta di 0. Quindi sono passato a windbg ma il risultato è lo stesso.
Un'altra cosa strana è che quando iniziamo sysinternals dbgvw non vediamo alcuna chiamata nelle nostre applicazioni.
Hai qualche suggerimento su cosa potremmo provare dopo per scoprire quale / chi è il colpevole?
Soluzione 2
A quanto pare, era un bug all'interno di WPF e la soluzione era creare un gestore di finestre come primo oggetto o qualcosa del genere. Grazie ragazzi
Altri suggerimenti
Se stai cercando perdite non gestite e stai usando Visual Studio puoi ottenere informazioni sorprendentemente utili usando le funzioni crt integrate: