Odporúčaná, 2024

Redakcia Choice

Rozdiel medzi dispose () a finalize () v C #

Metódy disponujú () a finalize () sú metódy C #, ktoré sú vyvolané na uvoľnenie nespravovaných zdrojov držaných objektom. Metóda dispose () je definovaná vo vnútri rozhrania IDisposable, pričom metóda finalize () je definovaná vo vnútri objektu triedy. Hlavným rozdielom medzi dispos () a finalize () je, že metóda dispose () musí byť explicitne vyvolaná užívateľom, zatiaľ čo metóda finalize () je vyvolaná zberačom odpadu, tesne predtým, než je objekt zničený. Pozrite sa na ďalšie rozdiely medzi nimi pomocou porovnávacieho grafu zobrazeného nižšie.

Porovnávacia tabuľka

Základ pre porovnaniezlikvidovať ()dokončiť ()
definovanýMetóda dispose () je definovaná v rozhraní rozhrania IDisposable.Metóda finalize () id je definovaná v triede java.lang.object.
syntaxpublic void Vyradiť () {
Kód zlikvidujte tu
}
chrániť void finalize () {
// finalizačného kódu tu
}
vyvolanýMetóda dispose () je vyvolaná používateľom.Metóda finalize () je vyvolaná zberačom odpadu.
účelMetóda dispose () sa používa na uvoľnenie nespravovaných zdrojov vždy, keď je vyvolaná.Metóda finalize () sa používa na uvoľnenie nespravovaných zdrojov pred zničením objektu.
uskutočnenieMetóda dispose () sa má implementovať vždy, keď existuje metóda close ().Spôsob finalize () sa má implementovať pre nespravované zdroje.
Špecifikátor prístupuMetóda dispose () je deklarovaná ako verejná.Metóda finalize () je deklarovaná ako súkromná.
akčnéMetóda dispose () je rýchlejšia a okamžite disponuje objektom.Spôsob finalizácie je pomalší v porovnaní s likvidáciou
výkonMetoda disponuje () vykonáva okamžitú akciu, preto neovplyvňuje výkon webových stránok.Metóda finalize (), ktorá je pomalšia, ovplyvňuje výkonnosť webových stránok.

Definícia likvidácie ()

Metóda dispose () uvoľňuje nespravované zdroje, ktoré sú držané objektom triedy. Nespravovanými prostriedkami sú súbory, dátové pripojenia atď. Metóda dispose () je deklarovaná v rozhraní IDisposeable a je implementovaná triedou implementáciou rozhrania IDisposable. Táto metóda sa nevolá automaticky. Programátor ju musí implementovať manuálne, keď vytvárate vlastnú triedu, ktorú použijú ostatní. Metóda má nasledujúcu syntax:

 public void dispose () {// Zrušte kód tu} 

Vo vyššie uvedenej syntaxe môžete pozorovať, že metóda je deklarovaná ako verejná. Je to preto, lebo táto metóda je definovaná v rozhraní IDisposable a musí byť implementovaná triedou implementujúcou toto rozhranie. Preto, aby bola prístupnosť implementačnej triedy prístupná, je táto metóda vyhlásená za verejnú.

Táto metóda sa vyvolá ručne pomocou kódu programu, ktorý je implementovaný na vyvolanie. Výkonnosť metód je rýchla a okamžite uvoľňuje zdroje držané objektom triedy.

Definícia finalizácie ()

Metóda finalize () je definovaná v triede objektov . Používa sa na čistenie. Táto metóda sa nazýva zberač odpadkov, keď sa referencia objektu dlhodobo nepoužíva. Garbage collector automaticky uvoľňuje spravované prostriedky, ale ak chcete oslobodiť nespravované zdroje, ako sú súborov, dátové pripojenia atď., Metóda finalizácie musí byť implementovaná manuálne. Zberač odpadkov vyvolá metódu dokončiť () tesne pred úplným zničením objektu.

Syntax metódy finalize ():

 chrániť void finalize () {// finalizačný kód tu} 

Vo vyššie uvedenej syntaxe je metóda finalize () vyhlásená za chránenú. Dôvodom je, že finalizácia metódy () nesmie byť prístupná zvonku triedy a musí byť prístupná len zberaču odpadu.

Metóda finalize () ovplyvňuje náklady na výkon, pretože okamžite nezbavuje pamäť. V metóde C # sa finalizácia automaticky nazýva deštruktormi.

Kľúčové rozdiely Medzi dispos () a finalizovať ()

  1. Metóda dispose () je definovaná v rozhraní IDisposable . Na druhej strane metóda finalize () je definovaná v objekte triedy.
  2. Metóda dispose () musí byť manuálne vyvolaná vnútri kódu programátorom, zatiaľ čo metóda finalize je automaticky vyvolaná zberačom odpadu predtým, než zničí objekt.
  3. Metodológia likvidácie by mohla byť vyvolaná kedykoľvek, zatiaľ čo finalizácia metódy je vyvolaná zberačom odpadu, keď zistí, že tento objekt nebol dlhodobo odkazovaný.
  4. Metóda dispose () je implementovaná v triede po implementácii rozhrania IDisposable. Spôsob finalize () musí byť implementovaný iba pre nespravované zdroje, pretože spravované zdroje sú automaticky zbavené zberačmi odpadu.
  5. Zadávací špecifikátor metódy dispose () je verejný, ako je definovaný v rozhraní IDisposable a bude implementovaný triedou implementujúcou toto rozhranie, preto by mala byť verejná. Na druhej strane metóda finalize () má chránený špecifikátor prístupu, takže by nemal byť prístupný žiadnemu členovi mimo triedy.
  6. Metóda dispose () je rýchla a objekt okamžite uvoľní, preto nemá vplyv na výkonové náklady. Spôsob finalize () je pomalší a neobmedzuje prostriedky, ktoré má objekt okamžite.

záver:

Odporúča sa použiť metodu dispose () pre metódu finalize (), pretože je rýchlejšia než finalizácia. Tiež by sa to mohlo kedykoľvek nazvať, ak to bude potrebné.

Top