I programmeringsspråk kan ett objekt endast ha en variabel under dess existens, efter instansiering kan den inte ändras. Så samma minnescell kan inte allokeras till nya värden, vilket innebär att någon form av automatiserad minneshantering krävs för att hantera de oanvända utrymmena. Dessa oanvända utrymmen kallas skräp och hela processen med effektiv minneshantering kallas skräpsamling.
Huvudsyftet med en sopsamlare är att skilja de döda föremålen från de levande föremålen och återta platsen för återanvändning. I grund och botten fungerar det hela på hanterad heap, vilket bara är ett minnesblock och sopsamlare kontrollerar regelbundet heapminnet för att allokera minne till nya objekt. Det finns två metoder för att släppa ut hanterade resurser som filer och databasanslutningar: Kassera och slutföra.
Denna artikel hjälper dig att förstå skillnaden mellan de två.
Kassera är ett vanligt sätt för användare att berätta för objekt att släppa sina resurser och inte försöka komma åt objekten igen. Disponeringsmetoden ger kontroll över explicit minnesuppretting genom att göra objekten oanvändbara.
När användarna kallar Dispose () -metoden, ska objektet frigöra alla sina dyra resurser och därigenom göra den tillgänglig för återanvändning. Det kallas aldrig av skräpuppsamlaren som bara kommer att spela när hanterat minne blir knappt. Ett speciellt gränssnitt som heter "IDisposable" används för att bestämma var och hur man implementerar Dispose (). Men vad händer när bortskaffningsmetoden inte kallas?
Om bortskaffningsmetoden inte kallas, är återgångsplanen att använda Finalize () -metoden för rengöring. Det kallas av sophämtaren för att utföra en slutlig resursrening innan det frigör minne. Begreppet tidsbegränsat rengöring blir inte tillämpligt här, för att snarare än att allokera minnet omedelbart läggs objektet till slutkön bara för att förstöras senare. Slutförandet är mer som en skyddsåtgärd som införs vid ett programmeringsfel och bortskaffandet rensar inte upp resurserna, i vilket fall slutanvändningen () -metoden heter av sopsamlare för att avlägsna oåtkomliga objekt i vilken ordning det helst.
Kassera metod kallas för att påskynda frigörandet av omanagda resurser som databashandtag, filhandtag, semaforer och andra objekt som tilldelas av operativsystemet. Disponeringsmetoden åberopas för att utföra kod som krävs för att rensa oanvänd minne och knappa resurser som GDI-handtag. I enkla termer ger bortskaffningsmetoden kontroll över explicit minnesuppretting. Slutförandemetoden är å andra sidan en del av sopkollektion som används för att utföra slutlig rengöring på ett objekt innan det sopas upp sopor. Enkelt uttryckt kallas slutgiltig metod för att frigöra omanagda resurser som innehas av ett objekt innan det förstörs.
Kassera metod kan uttryckas uttryckligen av användarkoden och klassen som implementerar metoden för att skicka resurser. Minnet kan dock inte släppas förrän sopsamlaren utför rengöringsprocessen. Metoden kan ringas även om andra referenser till objektet fortfarande finns. Den slutliga metoden, tvärtom, kan åberopas av soporuppsamlaren först efter att den har bestämt att det sista minnesobjektet är förstört och inga referenser till föremålet existerar. När den slutgiltiga metoden exekveras tas objektet bort från hålminne.
Processen att avlägsna ett objekt från minnet kallas kassera mönster, vilket kan användas för objekt som har tillgång till omanagda resurser eftersom sopsamlaren inte kan återställa omanagda resurser. Det "IDisposable" gränssnittet tillsammans med en ytterligare Dispose (Boolean) -metod är genomförd och kräver att man frigör omanagda resurser. En slutgiltig metod utförs när förekomsten av ett objekt förstörs före dess fördelning. Det är en icke-deterministisk metod som sker enligt skräppostens insamlare och kan inte ens uppstå. Det bör inte genomföras på hanterade objekt tills det är extremt nödvändigt.
Det är mycket snabbare att använda en kasseringsmetod än att slutföra för omedelbar bortskaffande av objekt. Destructorer konverteras automatiskt för att slutföra metoden vid körning. Den åberopas automatiskt av soporuppsamlaren när objektet faller utanför omfånget, vilket vanligtvis händer när förekomsten av det objektet förstörs. Problemet med att slutföra metoden är att det är icke-deterministisk menar att det inte är säkert när man ska återvinna minne som inte längre hänvisas till genom sopkollektion. Det kan dock inte frigöra minne omedelbart. i själva verket kan det aldrig kallas och det kan inte uttryckas uttryckligen.
Huvudskillnaden mellan kassera och slutföra metoder är att den förra är en deterministisk metod som omedelbart förfogar objekt när de inte längre används, medan den senare är en icke-deterministisk metod för allokering av omanagda resurser, vilket innebär att det är en backstop-metod för att frigöra minnesobjektet när de går ur räckvidd före deallokeringen. Det är alltid lämpligt att använda kasseringsmetoden under slutförandet, om inte extremt nödvändigt.
Med andra ord, slutförandet är en skyddsåtgärd som har införts för att städa upp omanagda resurser när bortskaffningsmetoden inte kan ringas om några programmeringsfel uppstår. Avsluta metoden kallas av sopsamlare när ett objekt håller på att sparkas ut från hålminne.