2010-11-01 1 views
5

Quando eseguo la mia app mirata su .Net 3.5, ha perdite di memoria enormi. 50mb ogni volta che assegno un UserControl a un ref locale. Creo solo un'istanza di ogni UserControl. Se compilo ed eseguo lo stesso codice indirizzato a .Net 4.0, tutto gira benissimo intorno al segno di 50mb.Come evitare enormi perdite di memoria su WPF su .Net 3.5?

Si tratta di un problema noto con 3.5? Cioè non è utilizzabile in prod?

/I miei clienti hanno solo 3,5 e non si muoverà a 4,0 per un po 'in modo che io non ho la scelta facile

+0

spiacenti prega di spiegare? Il codice va bene. Net 4.0 – DayTwo

+1

E cosa stai usando per determinare l'utilizzo della memoria? Se si tratta di Task Manager, dovresti sapere che è molto impreciso da usare per quello. –

risposta

8

Perdita di memoria Aggiornamenti rapidi per WPF 3.5 SP1
http://www.infoq.com/news/2010/06/WPF-Memory-Leaks

In particolare, uno sguardo a questi due aggiornamenti rapidi, che sono stati corretti in .NET 4.0, ma sono disponibili come aggiornamenti rapidi per gli utenti di .NET 3.5:

http://support.microsoft.com/kb/967634

http://support.microsoft.com/kb/967328

+0

Collegamento piacevole. Tuttavia, questi sembrano riferirsi principalmente alla pressione della memoria a breve termine con WeakReferences. –

+0

Accidenti a te WPF! Grazie, sembra aver risolto il problema. Ma non posso chiedere a tutti i miei clienti di applicare queste hot fix. Ci sono soluzioni alternative? – DayTwo

+0

@DayTwo: ne dubito; le correzioni devono essere distribuite. Se disponi di una funzione di aggiornamento automatico per il tuo software, puoi incorporarla in questo. –

4

Cosa ti fa pensare che è una perdita, e non solo di memoria che non ha sono stati raccolti dei rifiuti? C'è qualche impatto al di fuori di un numero in un profiler che ti interessa? Altrimenti, perché preoccuparsi. Preferiresti che il tuo programma usasse la memoria disponibile o preferiresti che usasse i cicli della CPU per recuperare oggetti inutilizzati?

+1

Perché dopo molte interazioni GUI lancia un'eccezione OutOfMemory. GC non reclama mai perdite. – DayTwo

+0

Mi piacerebbe vedere il codice che lo sta facendo. È molto più probabile un bug nel codice rispetto a Framework ... e 4.0 sta semplicemente gestendo meglio quel bug. –