Forskjellen mellom disponere og sluttføre

I programmeringsspråk kan en gjenstand kun variabel under eksistensen, etter instansiering kan den ikke endres. Så samme minnecelle kan ikke allokeres til nye verdier, og derfor er det nødvendig med en form for automatisert minnehåndtering for å håndtere ubrukte mellomrom. Disse ubrukte stedene kalles søppel, og hele prosessen med effektiv minnehåndtering kalles søppelsamling.

Hovedformålet med en søppelkollektor er å skille de døde gjenstandene fra de levende gjenstandene og gjenvinne plassen for gjenbruk. I utgangspunktet fungerer hele greia på klargjort bunke, noe som bare er en minneboks, og søppelsamleren kontrollerer periodisk hakkehukommelsen for å tildele minne til nye gjenstander. Det finnes to metoder for å frigjøre ustyrte ressurser som filer og databaseforbindelser: Kast og slutt.

Denne artikkelen hjelper deg å forstå forskjellen mellom de to.

Hva er en Disponeringsmetode?

Disponere er en standard måte for brukere å fortelle objekter å frigjøre sine ressurser og ikke for å prøve å få tilgang til gjenstandene igjen. Disponeringsmetoden gir kontroll over eksplisitt minneopprydding ved å gjøre objektene ubrukelige.

Når brukerne kaller Dispose () -metoden, skal objektet frigjøre alle sine dyre ressurser og dermed gjøre det tilgjengelig for gjenbruk. Det kalles aldri av søppelkollektor som bare kommer til å spille når det blir klart at minnet blir lite. Et spesielt grensesnitt kalt "IDisposable" brukes til å bestemme hvor og hvordan å implementere Dispose (). Men hva skjer når kasseringsmetoden ikke blir kalt?

Hva er en ferdigstillingsmetode?

Hvis kasseringsmetoden ikke blir kalt, er tilbakekallingsplanen å bruke Finalize () -metoden for opprydding. Det kalles av søppelsamleren for å utføre en endelig ressursopprydding før den frigjør minne. Konseptet med tidsriktig opprydding blir ubrukelig her fordi i stedet for å allokere minnet umiddelbart, blir objektet lagt til sluttkøen for å bli ødelagt senere. Endeliggjøringen er mer som en sikring iverksatt i tilfelle en programmeringsfeil, og bortskaffelsen rydder ikke opp ressursene. I så fall avsluttes metoden Finalize () fra søppelsamleren for å fjerne uoppnåelige objekter i hvilken rekkefølge den liker.

Forskjellen mellom Disponere og Avslutt

Grunnleggende om å avhende og fullføre

Avhending metode kalles for å øke hastigheten på utgivelsen av ustyrte ressurser som databasebehandler, filhåndtak, semaforer og andre objekter som er tildelt av operativsystemet. Disponeringsmetoden er påkalt for å utføre kode som kreves for å rydde opp ubrukt minne og knappe ressurser som GDI-håndtak. Enkelt sagt, disponeringsmetoden gir kontroll over eksplisitt minneopprydding. Endelig metode er derimot en del av søppelkolleksjon som brukes til å utføre endelig opprydding på et objekt før det blir søppel samlet. Enkelt sagt, sluttbrukes metode kalles for å frigjøre ustyrte ressurser som beholdes av et objekt før det er ødelagt.

Innkalling av Avhending og Fullføring

Disponeringsmetode kan kalles eksplisitt av brukerkoden og klassen som implementerer metoden for å disponere ressurser. Men minnet kan ikke løses før søppelkollektor utfører oppryddingsprosessen. Metoden kan kalles selv om andre referanser til objektet fortsatt eksisterer. Den avsluttende metoden, derimot, kan kun påberopes av søppelkollektor etter at den har bestemt at det siste minneobjektet er ødelagt, og det er ikke flere referanser til objektet. Etter at ferdigstillingsmetoden er utført, fjernes objektet fra heapminnet.

Implementering av Disponere og Fullfør

Prosessen med å disponere en gjenstand fra minnet kalles disponere mønster, som kan brukes til gjenstander som får tilgang til ustyrte ressurser fordi søppelkollektor ikke klarer å gjenvinne ustyrte ressurser. Det "IDisposable" grensesnittet sammen med en ekstra Dispose (Boolean) -metode er implementert og ber om frigjøring av ustyrte ressurser. En avsluttende metode utføres når forekomst av en gjenstand blir ødelagt før den utplasseres. Det er en ikke-deterministisk metode som skjer etter skjønnsoppsamlerens skjønn, og kan ikke engang oppstå. Det bør ikke implementeres på administrerte objekter før det er ekstremt nødvendig.

Utførelse av avhending og sluttbehandling

Det er mye raskere å bruke en kasseringsmetode enn å fullføre for umiddelbar bortskaffelse av gjenstander. Destructors konverteres automatisk for å fullføre metoden ved kjøring. Den blir automatisk påkalt av søppelkollektor når objektet går ut av omfanget, som vanligvis skjer når forekomsten av objektet er ødelagt. Problemet med å fullføre metoden er at det er ikke-deterministisk, noe som betyr at det ikke er sikkert når du skal gjenvinne minne som ikke lenger er referert gjennom søppelsamling. Det kan imidlertid ikke frigjøre minne umiddelbart; Faktisk kan det aldri bli kalt, og det kan ikke bli tvunget eksplisitt.

Avhend vs. Fullfør: Sammenligningstabell

Sammendrag av Avhending vs Fullfør

Hovedforskjellen mellom disponere og sluttføre metoder er at den tidligere er en deterministisk metode som umiddelbart disponerer objekter når de ikke lenger er i bruk, mens sistnevnte er en ikke-deterministisk metode for tildeling av ustyrte ressurser, noe som betyr at det er en backstop-metode for å frigjøre minneobjekt forekommer når de går utenfor omfanget før deallokering. Det er alltid tilrådelig å bruke disponeringsmetoden over slutt, med mindre det er ekstremt nødvendig.

Med andre ord, sluttføre er en sikring som er satt på plass for å rydde opp ustyrte ressurser når disponeringsmetode ikke kan kalles i tilfelle noen programmeringsfeil. Finaliseringsmetode kalles av søppelkollektor når en gjenstand er i ferd med å bli sparket ut av haugen.