I programmeringssprog kan et objekt kun have variabel i løbet af dets eksistens, og efter øjeblikkelig kan det ikke ændres. Så den samme hukommelsescelle kan ikke allokeres til nye værdier, og derfor kræves en slags automatiseret hukommelsesadministration for at styre de ubrugte rum. Disse ubrugte rum kaldes affald, og hele processen med effektiv hukommelsesstyring kaldes affaldsindsamling.
En affaldsopsamlings hovedformål er at adskille de døde genstande fra de levende genstande og genvinde pladsen til genbrug. Grundlæggende fungerer det hele på administreret bunke, som ikke er andet end en hukommelsesblok, og affaldsopsamleren tjekker med jævne mellemrummhukommelse for at allokere hukommelse til nye objekter. Der er to metoder til at frigive ikke-administrerede ressourcer som filer og databaseforbindelser: Bortskaf og afslutt.
Denne artikel hjælper dig med at forstå forskellen mellem de to.
Bortskaffelse er en standard måde for brugere at fortælle objekter om at frigive deres ressourcer og ikke at forsøge at få adgang til objekterne igen. Bortskaffelsesmetoden giver kontrol over eksplicit hukommelsesoprydning ved at gøre objekterne ubrugelige.
Når brugerne kalder metoden Dispose (), skal objektet frigøre alle dets dyre ressourcer og dermed gøre det tilgængeligt til genbrug. Det kaldes aldrig af affaldssamleren, som kun kommer til at spille, når den styrede hukommelse bliver mangelvare. En speciel grænseflade kaldet “IDisposable” bruges til at bestemme, hvor og hvordan implementere Dispose (). Men hvad sker der, når bortskaffelsesmetoden ikke bliver kaldt?
Hvis bortskaffelsesmetoden ikke bliver kaldt, er tilbagefaldsplanen at bruge metoden Finalize () til oprydning. Det kaldes af affaldsopsamleren at udføre en endelig ressourceoprydning, før den frigør hukommelse. Konceptet med rettidig oprydning bliver ikke anvendeligt her, fordi stedet snarere end at allokere hukommelsen med det samme, føjes objektet til færdiggørelseskøen først for at blive ødelagt senere. Færdiggørelse er mere som en beskyttelse, der indføres i tilfælde af en programmeringsfejl, og bortskaffelsen renser ikke ressourcerne, i hvilket tilfælde Finalize () -metoden kaldes af affaldsopsamleren til at fjerne utilgængelige objekter i den rækkefølge, den kan lide.
Bortskaffelsesmetode kaldes for at fremskynde frigivelsen af ikke-administrerede ressourcer, som f.eks. Databasehåndtag, filhåndtag, semaforer og andre objekter, der er tildelt af operativsystemet. Bortskaffelsesmetoden kaldes til at udføre kode, der kræves til oprydning af ubrugt hukommelse og knappe ressourcer som GDI-håndtag. Enkelt sagt giver bortskaffelsesmetoden kontrol over eksplicit hukommelsesoprydning. Færdiggørelsesmetode er på den anden side en del af opsamling af skrald, der bruges til at udføre endelig oprydning på et objekt, inden det indsamles affald. Kort sagt kaldes en færdiggørelsesmetode til frigørelse af ikke-administrerede ressourcer, der er i besiddelse af et objekt, før det ødelægges.
Bortskaffelsesmetode kan kaldes eksplicit af brugerkoden og klassen, der implementerer metoden til at disponere over ressourcer. Hukommelsen kan dog ikke frigøres, før affaldsopsamleren udfører oprydningsprocessen. Metoden kan kaldes, selvom der stadig findes andre henvisninger til objektet. Tværtimod kan færdiggørelsesmetoden påberåbes af affaldssamleren, når den bestemmer, at den sidste hukommelsesobjektforekomst er ødelagt, og der ikke findes flere henvisninger til objektet. Når færdiggørelsesmetoden er udført, fjernes objektet fra bunkehukommelsen.
Processen med at bortskaffe et objekt fra hukommelsen kaldes dispose-mønster, som kan bruges til objekter, der får adgang til ikke-administrerede ressourcer, fordi affaldsopsamleren ikke er i stand til at gendanne ikke-styrede ressourcer. "IDisposable" -grænsefladen sammen med en ekstra Dispose (Boolean) -metode implementeres og beder om frigivelse af ikke-administrerede ressourcer. En færdiggørelsesmetode udføres, når forekomst af et objekt ødelægges inden dets fordeling. Det er en ikke-deterministisk metode, der forekommer efter affaldssamlerens skøn og muligvis ikke engang forekommer. Det bør ikke implementeres på administrerede objekter, før det er yderst nødvendigt.
Det er meget hurtigere at bruge en bortskaffelsesmetode i stedet for at afslutte til øjeblikkelig bortskaffelse af genstande. Destruktorer konverteres automatisk til færdiggørelsesmetode ved kørsel. Det påkaldes automatisk af affaldsopsamleren, når objektet går ud af rækkevidden, hvilket normalt sker, når forekomsten af det pågældende objekt ødelægges. Problemet med færdiggørelsesmetoden er, at det er en ikke-deterministisk betydning, at det ikke er sikkert, hvornår man skal genvinde hukommelse, der ikke længere henvises til gennem affaldsindsamling. Det kan dog muligvis ikke frigøre hukommelse med det samme; faktisk kaldes det måske aldrig, og det kan ikke tvinges eksplicit.
Den største forskel mellem bortskaffelse og færdiggørelse af metoder er, at førstnævnte er en deterministisk metode, der øjeblikkeligt bortskaffer genstande, når de ikke længere er i brug, mens sidstnævnte er en ikke-deterministisk metode til tildeling af ikke-administrerede ressourcer, hvilket betyder, at det er en backstop-metode til at frigøre hukommelsesobjekter forekommer, når de går uden for anvendelsesområdet forud for deres samlokalisering. Det tilrådes altid at anvende bortskaffelsesmetoden over færdiggørelse, medmindre det er ekstremt nødvendigt.
Med andre ord er færdiggørelse en beskyttelse, der er indført for at rydde op i ustyrede ressourcer, når bortskaffelsesmetoden ikke kan kaldes i tilfælde af en vis programmeringsfejl. Færdiggørelsesmetode kaldes af affaldssamleren, når en genstand er ved at blive sparket ud af bunkehukommelsen.