Vă mulțumim pentru susținere

Stabilirea obiectelor la Null / Nimic după utilizare în .NET

Dacă setați toate obiectele la null ( Nimic în VB.NET) după ce ați terminat cu ele?

Înțeleg că în .NET este esențial să eliminăm orice instanță de obiecte care implementează interfața IDisposable pentru a elibera unele resurse, deși obiectul poate fi ceva după ce este dispus (de aici esteDispus proprietate în formulare), așa că presupun că poate încă locui în memorie sau cel puțin în parte?

Știu, de asemenea, că atunci când un obiect iese din domeniul de aplicare, acesta este apoi marcat pentru colectarea pregătită pentru următorul pas al colectorului de gunoi (deși acest lucru poate dura ceva timp).

Deci, cu acest lucru în minte se va seta la null accelera sistemul de eliberare a memoriei, deoarece nu trebuie să conceapă că nu mai este în domeniul de aplicare și sunt ele orice efecte secundare proaste?

Articolele MSDN nu fac niciodată acest lucru în exemple și în prezent fac acest lucru pe măsură ce nu pot a se vedea răul. Cu toate acestea, am întâlnit un amestec de opinii, astfel încât orice comentarii sunt utile.

0
adăugat editat
+1 întrebare mare. Știe cineva o circumstanță în care compilatorul va optimiza îndeajuns misiunea? adică, cineva sa uitat la MSIL în circumstanțe diferite și a notat IL pentru a seta un obiect la nul (sau lipsa acestuia).
adăugat autor Tim Medora

3 răspunsuri

Singura dată când trebuie să setați o variabilă la nulă este atunci când variabila nu iese din domeniul de aplicare și nu mai aveți nevoie de datele asociate cu aceasta. Altfel nu este nevoie.

0
adăugat
E adevărat, dar, de asemenea, înseamnă că probabil ar trebui să refaceți codul. Nu cred că am avut nevoie să declar o variabilă în afara scopului propus.
adăugat autor Karl Seguin
Dacă se înțelege că "variabila" include câmpuri de obiecte, atunci acest răspuns are multă sens. În cazul în care "variabila" înseamnă numai "variabila locală" (a unei metode), atunci probabil că vorbim despre cazuri de nișă aici (de exemplu, o metodă care rulează pentru o perioadă de timp mult mai mare decât cea obișnuită).
adăugat autor stakx

Un obiect presupune metoda .dispose () care forțează rescrierea resursei din memorie.

0
adăugat
Având în vedere că determinismul se aplică numai resurselor gestionate, nu celor care nu sunt administrate (adică memorie)
adăugat autor nicodemus13
Nu, nu; Dispose () nu colectează obiectul - este folosit pentru a efectua curățarea deterministă, eliberând de obicei resurse neadministrate.
adăugat autor Marc Gravell

Nu obiecte nulă. Puteți verifica http://codebetter.com/blogs/karlseguin/archive/2008/04/27/foundations-of-programming-pt-7-back-to-basics-memory.aspx pentru mai multe informații, dar setarea lucrurilor la null nu va face nimic, cu excepția murdării codului.

0
adăugat
O explicație frumoasă și detaliată despre memoria din legătura comună
adăugat autor user2323308