Doporučená, 2024

Redakce Choice

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

Metody dispose () a finalize () jsou metody C #, které jsou vyvolány pro uvolnění nespravovaných prostředků držených objektem. 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, že metoda dispose () musí být explicitně vyvolána uživatelem, zatímco metoda finalize () je vyvolána sběratelem odpadků, těsně před zničením objektu. Podívejme se na některé další rozdíly mezi nimi pomocí srovnávací tabulky uvedené níže.

Srovnávací graf

Základ pro porovnánídisponovat ()finalizovat ()
DefinovanýMetoda dispose () je definována v rozhraní rozhraní IDisposable.Metoda finalize () id definovaná ve třídě java.lang.object.
Syntaxpublic void Dispose () {
// Sem vložte kód
}
protected void finalize () {
// finalizační kód zde
}
VyvolánMetoda dispose () je vyvolána uživatelem.Metoda finalize () je vyvolána sběračem odpadků.
ÚčelMetoda dispose () se používá k uvolnění nespravovaných prostředků při každém vyvolání.Metoda finalize () se používá k uvolnění nespravovaných prostředků před zničením objektu.
ImplementaceMetoda dispose () má být implementována vždy, když existuje metoda close ().Metoda finalize () má být implementována pro nespravované prostředky.
Specifikátor přístupuMetoda dispose () je deklarována jako veřejná.Metoda finalize () je deklarována jako soukromá.
AkceMetoda dispose () je rychlejší a objekt okamžitě odstraní.Finalizace metody je ve srovnání s likvidací pomalejší
VýkonMetoda dispose () provádí okamžitou akci, tedy nemá vliv na výkon webových stránek.Metoda finalize (), která je pomalejší, ovlivňuje výkonnost webových stránek.

Definice dispozice ()

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

 public void dispose () {// Zakázat kód zde} 

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, která implementuje toto rozhraní. Pro zajištění přístupnosti implementační třídě je metoda deklarována jako veřejná.

Tato metoda je vyvolána manuálně kódem programu při jeho implementaci. Výkonnost metod je rychlá a okamžitě uvolní zdroje držené objektem třídy.

Definice finalizace ()

Metoda finalize () je definována ve třídě objektů . Používá se pro čištění. Tato metoda je volána kolektorem odpadků, když odkaz na objekt není používán po dlouhou dobu. Sběratel odpadků automaticky uvolní spravované prostředky, ale pokud chcete uvolnit nespravované prostředky, jako je například souborový manipulátor, datové připojení atd., Musí být metoda finalizace provedena ručně. Sběratel garbage vyvolá metodu finalize () těsně předtím, než objekt úplně zničí.

Syntaxe metody finalize ():

 protected void finalise () {// 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á z vnějšku třídy a musí být přístupná pouze sběrateli garbage.

Metoda finalize () ovlivňuje náklady na výkon, protože paměť okamžitě neuvolňuje. V C # je metoda finalizace automaticky volána s destruktory.

Klíčové rozdíly mezi dispose () a finalize ()

  1. Metoda dispose () je definována v rozhraní IDisposable . Metoda finalize () je definována v objektu třídy.
  2. Metoda dispose () musí být manuálně vyvolána uvnitř kódu programátorem, zatímco metoda finalizace je automaticky vyvolána sběračem odpadků předtím, než objekt zničí.
  3. Metoda dispose by mohla být vyvolána kdykoliv, zatímco metoda finalizace je vyvolána sběračem odpadků, když zjistí, že tento objekt nebyl dlouho odkazován.
  4. Metoda dispose () je implementována ve třídě po implementaci rozhraní IDisposable. Metoda finalize () musí být implementována pouze pro nespravované prostředky, protože spravované prostředky jsou automaticky uvolněny sběratelem odpadků.
  5. Specifikátor přístupu metody dispose () je veřejný, protože je definován v rozhraní IDisposable a byl by implementován třídou, která implementuje toto rozhraní, proto by měla být veřejná. Metoda finalize () má na druhou stranu specifikátor chráněného přístupu, takže by neměl být přístupný žádnému členu mimo třídu.
  6. Metoda dispose () je rychlá a objekt okamžitě uvolní, neovlivní náklady na výkon. Metoda finalize () je pomalejší a neuvolňuje prostředky, které objekt drží okamžitě.

Závěr:

Doporučuje se použít metodu dispose () přes metodu finalize (), protože je rychlejší než finalizace. Také, to mohlo být voláno kdykoliv, když je potřeba.

Top