De ce oamenii cred că o scurgere de memorie în .NET nu este la fel ca orice altă scurgere?
O scurgere de memorie este când atașați o resursă și nu o lăsați să meargă. Puteți face acest lucru atât în modul gestionat, cât și în cel neadministrat.
În ceea ce privește .NET și alte instrumente de programare, au existat idei despre colectarea gunoiului și alte modalități de a minimiza situațiile care vor face scurgerea aplicației dumneavoastră.
Dar cea mai bună metodă de a preveni scurgerile de memorie este că trebuie să înțelegeți modelul de memorie care stau la baza și modul în care funcționează lucrurile pe platforma pe care o utilizați.
Crezând că GC și alte magie vă vor curăța mizeria este calea scurtă spre scurgeri de memorie și va fi dificil de găsit mai târziu.
În cazul în care codificarea nu este gestionată, în mod normal, asigurați-vă că ați curățat, știți că resursele pe care le luați, va fi responsabilitatea dvs. de a curăța, nu de la portar.
În .NET, pe de altă parte, o mulțime de oameni cred că GC va curăța totul. Păi, o face pentru tine, dar trebuie să te asiguri că este așa. .NET nu împachetează o mulțime de lucruri, așa că nu știți întotdeauna dacă aveți de-a face cu o resursă gestionată sau ne-gestionată și trebuie să vă asigurați cu ce aveți de-a face. Manipularea fonturilor, a resurselor GDI, a directorului activ, a bazelor de date etc. este de obicei lucruri pe care trebuie să le priviți.
În termeni gestionați, îmi voi pune gâtul
linia să spună că nu mai merge o dată
procesul este ucis / eliminat.
Văd că o mulțime de oameni au acest lucru, totuși, și chiar sper că acest lucru se va termina. Nu puteți cere utilizatorului să vă desființeze aplicația pentru a vă curăța mizeria!
Uitați-vă la un browser, care poate fi IE, FF etc, apoi deschideți, să zicem, Google Reader, lăsați-l să stea câteva zile și să priviți ce se întâmplă.
Dacă deschideți apoi o altă filă în browser, navigați la un anumit site, apoi închideți fila care a găzduit cealaltă pagină care a scos din browser, credeți că browserul va elibera memoria? Nu la fel cu IE. Pe calculatorul meu, IE va mânca cu ușurință 1 GB de memorie într-o perioadă scurtă de timp (aproximativ 3-4 zile) dacă folosesc Google Reader. Unele ziare sunt chiar mai rele.