Rozdíl mezi dispose () a finalize () v C #

Autor: Laura McKinney
Datum Vytvoření: 2 Duben 2021
Datum Aktualizace: 13 Smět 2024
Anonim
Rozdíl mezi dispose () a finalize () v C # - Technologie
Rozdíl mezi dispose () a finalize () v C # - Technologie

Obsah


Metody dispose () a finalize () jsou metody C #, které jsou vyvolány k uvolnění nespravovaných zdrojů v držení objektu. Metoda dispose () je definována uvnitř rozhraní IDisposable, zatímco metoda finalize () je definována uvnitř objektu třídy. Hlavní rozdíl mezi dispose () a finalize () je ten způsob zlikvidovat() musí uživatel explicitně vyvolat, zatímco metoda dokončit() je vyvolán sběratelem odpadu, těsně před zničením objektu. Podívejme se na některé další rozdíly mezi nimi pomocí srovnávací tabulky níže.

  1. Srovnávací tabulka
  2. Definice
  3. Klíčové rozdíly
  4. Závěr

Srovnávací tabulka

Základ pro srovnánízlikvidovat ()dokončit ()
DefinovanýMetoda dispose () je definována v rozhraní IDisposable interface.Metoda finalize () id definovaná ve třídě java.lang.object.
Syntaxpublic void Dispose () {
// Zde zlikvidujte kód
}
chráněné neplatné dokončení () {
// finalizační kód zde
}
Vyvoláno Metoda dispose () je vyvolána uživatelem.Metoda finalize () je vyvolána sběratelem odpadu.
ÚčelMetoda dispose () se používá k uvolnění nespravovaných prostředků, kdykoli je vyvolána.Metoda finalize () se používá k uvolnění nespravovaných prostředků před zničením objektu.
ImplementaceMetoda dispose () se má implementovat vždy, když existuje metoda close ().Metoda finalize () má být implementována pro nespravované zdroje.
Specifikátor přístupuMetoda dispose () je prohlášena za veřejnou.Metoda finalize () je prohlášena za soukromou.
Akce Metoda dispose () je rychlejší a okamžitě zlikviduje objekt.Finalizace metody je pomalejší ve srovnání s likvidací
VýkonMetoda disponuje () provádí okamžitou akci, a proto neovlivňuje výkon webových stránek. Metoda finalizace () je pomalejší ovlivňuje výkon webových stránek.


Definice dispozice ()

Metoda dispose () uvolňuje nespravované prostředky, které jsou drženy objektem třídy. Nespravovanými prostředky jsou soubory, datová připojení atd. Metoda dispose () je deklarována v rozhraní IDisposeable a je implementován třídou implementací rozhraní IDisposable. Tato metoda není volána automaticky. Programátor ji musí implementovat ručně, když vytváříte vlastní třídu, kterou budou používat ostatní. Metoda má následující syntaxi:

public void dispose () {// Dispose code here}

Ve výše uvedené syntaxi můžete pozorovat, že metoda je deklarována jako veřejná. Je to proto, že tato metoda je definována v rozhraní IDisposable a musí být implementována třídou implementující toto rozhraní. Aby byla zajištěna dostupnost implementační třídy, je metoda deklarována jako veřejná.


Tato metoda je vyvolána ručně kódem programu, jak je implementován k vyvolání. Výkon metod je rychlý a okamžitě uvolňuje prostředky držené objektem třídy.

Definice finalizace ()

Metoda finalize () je definována v objekt třída. Používá se pro čištění. Tato metoda je volána sběratelem odpadků, když se odkaz na objekt dlouho nepoužívá. Sběratel odpadu uvolňuje spravované prostředky automaticky, ale pokud chcete uvolnit nespravované prostředky, jako je popisovač souborů, datové připojení atd., Je třeba finalizační metodu implementovat ručně. Sběratel odpadků vyvolá metodu finalize () těsně předtím, než úplně zničí objekt.

Syntaxe metody finalize ():

protected void finalize () {// finalizační kód zde}

Ve výše uvedené syntaxi je metoda finalize () deklarována jako chráněná. Důvodem je to, že metoda finalize () nesmí být přístupná zvnějšku třídy a musí být přístupná pouze sběrateli odpadu.

Metoda finalize () ovlivňuje náklady na výkon, protože neuvoľňuje paměť okamžitě. V C # je metoda finalizace volána automaticky pomocí destruktorů.

  1. Metoda dispose () je definována v rozhraní IDisposable. Na druhou stranu metoda finalize () je definována ve třídě objekt.
  2. Metodu dispose () je nutné vyvolat uvnitř kódu programátorem, zatímco finalizaci metody automaticky vyvolá sběratel odpadu, než zničí objekt.
  3. Likvidace metody by mohla být vyvolána kdykoli, zatímco finalizace metody je vyvolána sběratelem odpadu, když zjistí, že tento objekt nebyl dlouho odkazován.
  4. Metoda dispose () je implementována do třídy po implementaci rozhraní IDisposable. Metoda finalize () musí být implementována pouze pro nespravované zdroje protože spravované prostředky jsou automaticky uvolněny sběratelem odpadu.
  5. Specifikátor přístupu metody dispose () je veřejný, protože je definován v rozhraní IDisposable interface a bylo by implementováno třídou, která implementuje toto rozhraní, a proto by měla být veřejná. Na druhou stranu, metoda finalize () má specifikátor chráněného přístupu, takže by neměla být přístupná žádnému členovi mimo třídu.
  6. Metoda dispose () je rychlá a uvolňuje objekt okamžitě, proto neovlivňuje náklady na výkon. Metoda finalize () je pomalejší a neuvolňuje prostředky, které má objekt okamžitě.

Závěr:

Doporučuje se použít metodu dispose () před metodou finalize (), protože je rychlejší než finalizace. V případě potřeby ji lze nazvat také kdykoli.