Programavimo kalbomis objektas gali būti kintamas tik egzistavimo metu, po realizacijos jo negalima modifikuoti. Taigi tos pačios atminties ląstelės negalima priskirti naujoms reikšmėms, todėl norint valdyti nenaudojamas vietas, reikalingas tam tikras automatinis atminties valdymas. Šios nepanaudotos vietos vadinamos šiukšlėmis, o visas efektyvaus atminties tvarkymo procesas vadinamas šiukšlių rinkimu.
Pagrindinis šiukšlių surinkėjo tikslas yra atskirti negyvus daiktus nuo gyvų daiktų ir susigrąžinti erdvę pakartotiniam naudojimui. Iš esmės visa tai veikia valdomoje krūvoje, o tai yra ne kas kita, kaip atminties blokas, o šiukšlių surinkėjas periodiškai tikrina krūvos atmintį, norėdamas skirti atmintį naujiems objektams. Yra du nevaldomų išteklių, tokių kaip failai ir duomenų bazių jungtys, išlaisvinimo būdai: Išmeskite ir Baigti.
Šis straipsnis padeda suprasti skirtumą tarp šių dviejų.
Šalinimas yra įprastas būdas vartotojams nurodyti objektams išlaisvinti savo išteklius ir nebandyti vėl prieiti prie objektų. Šalinimo metodas suteikia galimybę valdyti tiesioginį atminties išvalymą, padarydamas objektus nenaudotinais.
Kai vartotojai paskambina Dispose () metodu, objektas turėtų atlaisvinti visus savo brangius išteklius, tokiu būdu sudarydamas galimybę jį naudoti pakartotinai. Jį niekada nekviečia šiukšlių surinkėjas, kuris žaidžia tik tada, kai trūksta atminties. Kur nuspręsti, kur ir kaip įgyvendinti „Dispose“ (), naudojama speciali sąsaja, vadinama „IDisposable“. Bet kas nutinka, kai disponavimo metodas nepaskambina?
Jei disponavimo metodu nepaskambinama, atsarginis planas yra naudoti valymo metodą „Finalize ()“. Šiukšlių surinkėjas ragina atlikti galutinį išteklių išvalymą prieš tai atlaisvinant atmintį. Laiku valymo koncepcija čia netaikoma, nes užuot iškart skyręs atmintį, objektas pridedamas prie užbaigimo eilės tik sunaikinamas vėliau. „Baigti“ yra daugiau kaip apsaugos priemonė, įdiegta įvykus programavimo klaidai, o išmetimas neišvalo išteklių; tokiu atveju šiukšlių surinkėjas pasisako „Baigti“ () metodą, kad pašalintų nepasiekiamus objektus bet kokia seka..
Šalinimo metodas vadinamas pagreitinti nevaldomų išteklių, tokių kaip duomenų bazių rankenos, failų rankenos, semaforos ir kiti objektai, kuriuos skiria operacinė sistema, išleidimą. Šalinimo metodas naudojamas norint vykdyti kodą, reikalingą nepanaudotai atminčiai ir ribotiems ištekliams, tokiems kaip GDI rankenos, išvalyti. Paprastai tariant, dispose metodas suteikia galimybę valdyti tiesioginį atminties išvalymą. Kita vertus, baigimo būdas yra šiukšlių surinkimo dalis, naudojama objekto galutinei valymo operacijai atlikti prieš pradedant rinkti šiukšles. Paprasčiau tariant, baigimo metodas yra vadinamas nemokamais nevaldomais ištekliais, kuriuos objektas laiko prieš sunaikinimą.
Šalinimo metodą galima aiškiai vadinti vartotojo kodu ir klase, kuri įgyvendina metodą, kad disponuotų ištekliais. Tačiau atminties negalima atlaisvinti, kol šiukšlių surinkėjas atliks valymo procesą. Metodas gali būti vadinamas, net jei vis dar yra kitų nuorodų į objektą. Atlikti metodą, atvirkščiai, šiukšlių surinkėjas gali remtis tik tada, kai nustato, kad paskutinis atminties objekto egzempliorius yra sunaikintas ir daugiau jokių nuorodų į objektą neegzistuoja. Vykdydamas baigimo metodą, objektas pašalinamas iš krūvos atminties.
Objekto išmetimo iš atminties procesas yra vadinamas dispose modeliu, kuris gali būti naudojamas objektams, kurie pasiekia nevaldomus išteklius, nes šiukšlių surinkėjas negali atgauti nevaldomų išteklių. Įdiegta sąsaja „IDisposable“ kartu su papildomu „Dispose“ (Boolean) metodu, reikalaujant išleisti nevaldomus išteklius. Baigimo būdas vykdomas, kai objekto egzempliorius sunaikinamas prieš jį paskirstant. Tai nėra deterministinis metodas, kuris pasirenkamas šiukšlių surinkėjo nuožiūra ir gali net nepasireikšti. Jis neturėtų būti įgyvendinamas valdomuose objektuose, kol to nepaprastai reikia.
Daug greičiau naudoti disponavimo metodą, o ne baigti, kad būtų galima nedelsiant sunaikinti objektus. Naikintojai automatiškai paverčiami metodu, kad būtų baigtas naudoti. Jį automatiškai iššaukia šiukšlių surinkėjas, kai objektas išeina iš apimties, o tai dažniausiai nutinka sunaikinus to objekto egzempliorių. Baigimo metodo problema yra ta, kad tai nedetermininė prasmė. Nežinia, kada atgauti atmintį, į kurią nebekeliama nuoroda renkant šiukšles. Tačiau tai gali neatlaisvinti atminties iškart; Tiesą sakant, ji niekada negali būti vadinama ir negalima jos aiškiai atversti.
Pagrindinis skirtumas tarp disponavimo metodais ir galutinių metodų yra tas, kad pirmasis yra deterministinis metodas, kuris akimirksniu sunaikina objektus, kai jie nebenaudojami, o antrasis yra nedeterministinis metodas, skirtas paskirstyti nevaldomus išteklius, ty tai yra atbulinės eigos būdas atlaisvinti. atminties objektų atvejai, kai jie neišeina iš taikymo srities prieš juos paskirstant. Visada patartina naudoti utilizavimo metodą, nebent tai būtų ypač būtina.
Kitaip tariant, užbaigti - tai apsaugos priemonė, įdiegta nevaldomiems ištekliams išvalyti, kai disponavimo metodo negalima vadinti įvykus kokiai nors programavimo klaidai. Pabaigos metodą šiukšlių surinkėjas vadina, kai objektas bus išmestas iš krūvos atminties.