Perché le persone pensano che una perdita di memoria in .NET non sia uguale a qualsiasi altra perdita?
Una perdita di memoria si verifica quando ci si collega a una risorsa e non si lascia andare. Puoi farlo sia nella codifica gestita che non gestita.
Per quanto riguarda .NET e altri strumenti di programmazione, ci sono state idee sulla raccolta dei rifiuti e altri modi per ridurre al minimo le situazioni che potrebbero far perdere la tua applicazione. Ma il metodo migliore per prevenire perdite di memoria è che devi capire il tuo modello di memoria sottostante e come funzionano le cose sulla piattaforma che stai utilizzando.
Credere che GC e altra magia ripuliranno il tuo pasticcio è la via più breve per le perdite di memoria, e sarà difficile da trovare in seguito.
Quando si codifica unmanaged, di solito ci si assicura di ripulire, si sa che le risorse di cui si prende possesso, sarà la propria responsabilità di ripulire, non quella del bidello.
In .NET d'altra parte, molte persone pensano che il GC pulirà tutto. Bene, fa un po 'per te, ma devi assicurarti che sia così. .NET racchiude molte cose, quindi non sempre sai se hai a che fare con una risorsa gestita o non gestita e devi assicurarti di cosa stai trattando. La gestione di caratteri, risorse GDI, active directory, database ecc. È in genere ciò che devi cercare.
In termini gestiti, metterò il mio collo sulla linea per dire che scompare una volta che il processo viene ucciso / rimosso.
Vedo che molte persone hanno questo, e spero davvero che finirà. Non puoi chiedere all'utente di terminare la tua app per ripulire il tuo casino! Dai un'occhiata a un browser, che può essere IE, FF ecc., Quindi apri, diciamo, Google Reader, lascialo riposare per alcuni giorni e guarda cosa succede.
Se poi apri un'altra scheda nel browser, navighi in qualche sito, quindi chiudi la scheda che ha ospitato l'altra pagina che ha fatto trapelare il browser, pensi che il browser rilascerà la memoria? Non così con IE. Sul mio computer IE consumerà facilmente 1 GiB di memoria in un breve lasso di tempo (circa 3-4 giorni) se utilizzo Google Reader. Alcune pagine sono anche peggiori.