Różnica między dispose () i finalize () w C #

Autor: Laura McKinney
Data Utworzenia: 2 Kwiecień 2021
Data Aktualizacji: 10 Móc 2024
Anonim
Różnica między dispose () i finalize () w C # - Technologia
Różnica między dispose () i finalize () w C # - Technologia

Zawartość


Metody dispose () i finalize () to metody języka C #, które są wywoływane w celu uwolnienia niezarządzanych zasobów przechowywanych przez obiekt. Metoda dispose () jest zdefiniowana w interfejsie IDisposable, natomiast metoda finalize () jest zdefiniowana w obiekcie klasy. Główną różnicą między dispose () i finalize () jest to, że metoda dysponować() musi być jawnie wywołane przez użytkownika, podczas gdy metoda sfinalizować() jest wywoływany przez moduł wyrzucający elementy bezużyteczne, tuż przed zniszczeniem obiektu. Przeanalizujmy kilka innych różnic między nimi za pomocą tabeli porównawczej pokazanej poniżej.

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania

Podstawa do porównaniadispose ()finalizacja ()
ZdefiniowaneMetoda dispose () jest zdefiniowana w interfejsie IDisposable interface.Identyfikator metody finalize () zdefiniowany w klasie java.lang.object.
Składniapublic void Dispose () {
// Usuń kod tutaj
}
protected void finalize () {
// kod finalizacji tutaj
}
Wywołano Metoda dispose () jest wywoływana przez użytkownika.Metoda finalize () jest wywoływana przez moduł czyszczenia pamięci.
Cel, powódMetoda dispose () służy do zwalniania niezarządzanych zasobów przy każdym wywołaniu.Metoda finalize () służy do uwolnienia niezarządzanych zasobów przed zniszczeniem obiektu.
RealizacjaMetodę dispose () należy wdrożyć za każdym razem, gdy istnieje metoda close ().Metoda finalize () ma zostać zaimplementowana dla niezarządzanych zasobów.
Specyfikator dostępuMetoda dispose () jest zadeklarowana jako publiczna.Metoda finalize () jest zadeklarowana jako prywatna.
Akcja Metoda dispose () jest szybsza i natychmiast usuwa obiekt.Metoda finalizacji jest wolniejsza w porównaniu do usuwania
WystępMetoda disposes () wykonuje natychmiastowe działanie, dlatego nie wpływa na wydajność stron internetowych. Wolniejsza metoda finalize () wpływa na wydajność stron internetowych.


Definicja dispose ()

Metoda dispose () uwalnia niezarządzane zasoby, które są przechowywane przez obiekt klasy. Niezarządzanymi zasobami są pliki, połączenia danych itp. Metoda dispose () jest zadeklarowana w interfejsie IDisposeable i jest implementowany przez klasę poprzez implementację interfejsu IDisposable. Ta metoda nie jest wywoływana automatycznie. Programista musi zaimplementować go ręcznie podczas tworzenia niestandardowej klasy, która będzie używana przez innych. Metoda ma następującą składnię:

public void dispose () {// Usuń kod tutaj}

W powyższej składni można zaobserwować, że metoda została zadeklarowana jako publiczna. Jest tak, ponieważ ta metoda jest zdefiniowana w interfejsie IDisposable i musi zostać zaimplementowana przez klasę, która implementuje ten interfejs. Tak więc, aby zapewnić dostępność klasie implementującej, metoda jest zadeklarowana jako publiczna.

Ta metoda jest wywoływana ręcznie przez kod programu, który został zaimplementowany w celu wywołania. Wydajność metod jest szybka i natychmiast uwalnia zasoby posiadane przez obiekt klasy.


Definicja finalize ()

Metoda finalize () jest zdefiniowana w pliku obiekt klasa. Służy do czyszczenia. Ta metoda jest wywoływana przez moduł czyszczenia pamięci, gdy odwołanie do obiektu nie jest używane przez długi czas. Garbage collector automatycznie uwalnia zarządzane zasoby, ale jeśli chcesz zwolnić niezarządzane zasoby, takie jak uchwyt pliku, połączenie danych itp., Metodę finalizacji należy wdrożyć ręcznie. Śmieciarka wywołuje metodę finalize () tuż przed całkowitym zniszczeniem obiektu.

Składnia metody finalize ():

protected void finalize () {// kod finalizacji tutaj}

W powyższej składni metoda finalize () jest zadeklarowana jako chroniona. Powodem tego jest to, że metoda finalize () nie może być dostępna spoza klasy i musi być dostępna tylko dla śmieciarza.

Metoda finalize () wpływa na koszt wydajności, ponieważ nie zwalnia natychmiast pamięci. W języku C # metoda finalizacji jest wywoływana automatycznie za pomocą destruktorów.

  1. Metoda dispose () jest zdefiniowana w interfejsie IDisposable. Z drugiej strony metoda finalize () jest zdefiniowana w klasie obiekt.
  2. Metoda dispose () musi zostać ręcznie wywołana przez programistę w kodzie, podczas gdy finalizacja metody jest automatycznie wywoływana przez moduł wyrzucający elementy bezużyteczne, zanim zniszczy obiekt.
  3. Metoda dispose może zostać wywołana w dowolnym momencie, podczas gdy finalizowanie metody jest wywoływane przez moduł wyrzucający elementy bezużyteczne, gdy stwierdzi, że obiekt ten nie był wywoływany przez długi czas.
  4. Metoda dispose () jest implementowana w klasie po zaimplementowaniu interfejsu IDisposable. Metoda finalize () musi być zaimplementowana tylko dla niezarządzane zasoby ponieważ zarządzane zasoby są automatycznie zwalniane przez moduł czyszczenia pamięci.
  5. Specyfikator dostępu metody dispose () jest publiczny, ponieważ jest zdefiniowany w interfejsie IDisposable, i zostałby zaimplementowany przez klasę implementującą ten interfejs, dlatego powinien być publiczny. Z drugiej strony metoda finalize () ma chroniony specyfikator dostępu, dlatego nie powinien być dostępny dla żadnego elementu spoza klasy.
  6. Metoda dispose () jest szybka i natychmiast uwalnia obiekt, dlatego nie wpływa na koszt wydajności. Metoda finalize () jest wolniejsza i nie zwalnia zasobów posiadanych przez obiekt natychmiast.

Wniosek:

Sugeruje się użycie metody dispose () nad metodą finalize (), ponieważ jest ona szybsza niż finalizacja. Można go również wywołać w dowolnym momencie, gdy zajdzie taka potrzeba.