Ukloniti i završiti

Anonim

U programskim jezicima, objekt može imati samo varijablu tijekom svog postojanja, nakon instancijalizacije ne može se mijenjati. Istu memorijsku ćeliju ne može se dodijeliti novim vrijednostima, stoga je potrebna neka vrsta automatiziranog upravljanja memorijom za upravljanje neiskorištenim prostorima. Ti neiskorišteni prostori nazivaju se smećem i cijeli proces učinkovitog upravljanja pamćenjem naziva se sakupljanje smeća.

Glavni cilj sakupljača smeća je odvojiti mrtve predmete od živih predmeta i vratiti prostor za ponovnu upotrebu. Uglavnom, cijela stvar radi na upravljanom hrpu koji nije ništa drugo nego memorijski blok, a sakupljač smeća periodički provjerava memoriju hrpe kako bi se memorija dodijelila novim objektima. Dvije su metode za otpuštanje neupravljanih resursa kao što su datoteke i veze s bazama podataka: Odbaci i završi.

Ovaj vam članak pomaže u razumijevanju razlike između njih.

Što je metoda zbrinjavanja?

Ukloniti je standardni način da korisnici mogu otkriti objekte da puste svoje resurse, a ne pokušati ponovno pristupiti objektima. Metoda zbrinjavanja omogućuje kontrolu eksplicitnog čišćenja memorije tako da objekti budu neupotrebljivi.

Kada korisnici zovu metodu zbrinjavanja (), objekt bi trebao osloboditi sve svoje skupe resurse čime bi je omogućio ponovnu upotrebu. Nikada se nikada ne zove srebrni sakupljač koji dolazi samo kad upravljana memorija postaje rijetka. Posebno sučelje pod nazivom "IDisposable" koristi se za odlučivanje gdje i kako implementirati Dispose (). Ali što se događa kada se metoda raspolaganja ne zove?

Što je metoda finalizacije?

Ako metoda odlaganja ne dobije poziv, rezervni je plan koristiti Finalize () metodu za čišćenje. Sustav za prikupljanje smeća poziva ga da izvrši konačni čišćenje resursa prije nego oslobodi memoriju. Koncept pravovremenog čišćenja postaje ovdje neprimjenjiv jer umjesto da odmah odredi dodjelu memorije, objekt se dodaje redoslijedu finalizacije samo da bi kasnije bio uništen. Finaliziranje je više kao zaštita uvedena u slučaju pogreške u programiranju, a odlaganje ne očisti resurse, u kojem slučaju se skupljač smeća poziva na metodu Finalize () kako bi uklonio nedostupne objekte u bilo kojem slijedu koji mu se sviđa.

Razlika između odlaganja i završetka

Osnove zbrinjavanja i završetka

Metoda zbrinjavanja poziva se na ubrzanje otpuštanja neupravljanih resursa kao što su ručke za baze podataka, ručke datoteka, semafori i drugi objekti koje je dodijelio operativni sustav. Metoda raspolaganja se poziva za izvršavanje koda koji je potreban za čišćenje neiskorištene memorije i oskudnih resursa poput GDI ručki. Jednostavnim terminima, metoda raspolaganja pruža kontrolu eksplicitnog čišćenja memorije. Metoda finalizacije, s druge strane, dio je skupljanja smeća koja se koristi za obavljanje zadnje operacije čišćenja na objektu prije nego se sakupi smeće. Jednostavno rečeno, postupak finalizacije poziva se na besplatne neupravljane resurse koji drži neki objekt prije nego što je uništen.

Pozivanje na zbrinjavanje i završavanje

Metoda zbrinjavanja može se izričito nazvati korisničkim kodom i klasom koja provodi metodu zbrinjavanja resursa. Međutim, memorija se ne može otpustiti sve dok sakupljač smeća ne provede postupak čišćenja. Metoda se može nazvati čak i ako postoje druge reference na objektu. Naprotiv, postupak sakupljanja smeća može se pozvati samo nakon što utvrdi da je posljednja instanca memorijskog objekta uništena i nema više reference na objekt. Nakon završetka metode finalize, objekt se uklanja iz memorije hrpe.

Provedba zbrinjavanja i završetka

Proces odlaganja objekta iz memorije naziva se odlagati uzorak, koji se može koristiti za objekte koji pristupaju neupravljenim resursima jer smeća ne može vratiti neupravljene resurse. Implementirano je "IDisposable" sučelje uz dodatnu metodu zbrinjavanja (Boolean) koja traži izdavanje neupravljanih resursa. Metoda završetka izvršava se kada se primjerak objekta uništi prije njegovog odustajanja. To je ne-deterministička metoda koja se događa po vlastitom nahođenju sakupljača smeća i ne može se ni pojaviti. Ne bi se trebalo provoditi na upravljanim objektima sve dok ne bude izuzetno potrebno.

Izvođenje zbrinjavanja i završetka

Mnogo je brže upotrebljavati način zbrinjavanja, a ne finalizirati za trenutačno odlaganje predmeta. Destruktori se automatski pretvaraju u način finaliziranja tijekom izvođenja. Slušalica za smeće automatski se poziva kada objekt izlazi iz opsega, što se obično događa kada se instanca tog objekta uništi. Problem s finalizacijom metode je da je ne-determinističko značenje da nije sigurno kada treba vratiti memoriju koja se više ne upućuje kroz skupljanje smeća. Međutim, ona ne može odmah osloboditi memoriju; u stvari, nikad se ne može zvati i ne može se izričito prisiliti.

Odvedi prema finalizaciji: usporedni prikaz

Sažetak zbrinjavanja od finalizacije

Glavna razlika između postupaka raspolaganja i finalizacije jest da je bivša deterministička metoda koja odmah raspolaže objektima kada ih više ne upotrebljavaju, a potonji je ne-deterministička metoda za dodjeljivanje neupravljanih resursa što znači da je metoda povratne sprečavanja da se oslobodi instance memorije kada izađu iz opsega prije njihovog odustajanja.Uvijek je poželjno upotrijebiti metodu odlaganja prije završetka, osim ako je izuzetno potrebno.

Drugim riječima, finalizacija je zaštitna mjera za čišćenje neupravljanih resursa kada se metoda raspolaganja ne može nazvati u slučaju neke programske pogreške. Finaliziranje metode poziva se sakupljač smeća kada se objekt izbaci iz memorije hrpe.