Zalecane, 2024

Wybór Redakcji

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

Metody dispose () i finalize () to metody C #, które są wywoływane, aby zwolnić niezarządzane zasoby przechowywane 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 dispose () musi być jawnie wywołana przez użytkownika, podczas gdy metoda finalize () jest wywoływana przez garbage collector, tuż przed zniszczeniem obiektu. Przeanalizujmy kilka innych różnic między nimi za pomocą poniższej tabeli porównawczej.

Wykres porównania

Podstawa do porównaniadispose ()finalize ()
ZdefiniowanyMetoda dispose () jest zdefiniowana w interfejsie IDisposable interface.Metoda finalize () id zdefiniowana w klasie java.lang.object.
Składniapublic void Dispose () {
// Usuń tutaj kod
}
protected void finalize () {
// kod finalizacji tutaj
}
InvokedMetoda dispose () jest wywoływana przez użytkownika.Metoda finalize () jest wywoływana przez garbage collector.
Cel, powódMetoda dispose () służy do uwolnienia zasobów niezarządzanych za każdym razem, gdy jest wywoływana.Metoda finalize () służy do uwolnienia niezarządzanych zasobów zanim obiekt zostanie zniszczony.
RealizacjaMetoda dispose () powinna zostać zaimplementowana za każdym razem, gdy istnieje metoda close ().Metoda finalize () powinna zostać zaimplementowana dla zasobów niezarządzanych.
Specyfikator dostępuMetoda dispose () jest zadeklarowana jako publiczna.Metoda sfinalizowania () jest zadeklarowana jako prywatna.
AkcjaMetoda dispose () jest szybsza i natychmiast unieszkodliwia obiekt.Finalizacja metody jest wolniejsza w porównaniu do metody utylizacji
WydajnośćMetoda disposes () wykonuje natychmiastowe działanie, nie wpływa więc na wydajność stron internetowych.Metoda finalizacji () ma mniejszy wpływ na wydajność stron internetowych.

Definicja dispose ()

Metoda dispose () zwalnia niezarządzane zasoby, które są przechowywane przez obiekt klasy. Zasoby niezarządzane to pliki, połączenia danych itp. Metoda dispose () jest deklarowana w interfejsie IDisposeable i jest implementowana przez klasę poprzez implementację interfejsu IDisposable. Ta metoda nie jest wywoływana automatycznie. Programista musi zaimplementować go ręcznie, gdy tworzysz własną klasę, która będzie używana przez innych. Metoda ma następującą składnię:

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

W powyższej składni można zauważyć, że metoda jest zadeklarowana jako publiczna. Dzieje się tak dlatego, że ta metoda jest zdefiniowana w interfejsie IDisposable i musi zostać zaimplementowana przez klasę, która implementuje ten interfejs. Aby zapewnić dostępność dla klasy implementacji, metoda jest zadeklarowana jako publiczna.

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

Definicja finalizacji ()

Metoda finalize () jest zdefiniowana w klasie obiektu . Jest używany do czynności porządkowych. Ta metoda jest wywoływana przez garbage collector, gdy referencja obiektu nie jest używana przez długi czas. Garbage collector automatycznie zwalnia zarządzane zasoby, ale jeśli chcesz zwolnić niezarządzane zasoby, takie jak uchwyt pliku, połączenie danych itp., Metoda finalizacji musi zostać zaimplementowana ręcznie. Śmieciarz wywołuje metodę finalize () tuż przed całkowitym zniszczeniem obiektu.

Składnia metody finalize ():

 protected void finalize () {// kod zakończenia tutaj} 

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

Metoda finalize () wpływa na koszt wykonania, ponieważ nie zwalnia natychmiast pamięci. W języku C # metoda finalizacji jest wywoływana automatycznie z destruktorami.

Kluczowe różnice między dispose () i finalize ()

  1. Metoda dispose () jest zdefiniowana w interfejsie IDisposable . Z drugiej strony metoda finalize () jest zdefiniowana w obiekcie klasy.
  2. Metoda dispose () musi być ręcznie wywołana wewnątrz kodu przez programistę, podczas gdy metoda finalizacji jest automatycznie wywoływana przez moduł czyszczenia pamięci zanim zniszczy obiekt.
  3. Metoda dispose może zostać wywołana w dowolnym momencie, podczas gdy metoda finalizacji jest wywoływana przez garbage collector, gdy stwierdzi, że obiekt ten nie był przez dłuższy czas odwoływany.
  4. Metoda dispose () jest zaimplementowana w klasie po implementacji interfejsu IDisposable. Metoda finalize () musi być zaimplementowana tylko dla zasobów niezarządzanych, ponieważ zasoby zarządzane są automatycznie zwalniane przez moduł czyszczenia pamięci.
  5. Specyfikator dostępu metody dispose () jest publiczny, ponieważ jest zdefiniowany w interfejsie IDisposable i byłby implementowany przez klasę, która implementuje ten interfejs, stąd powinna być publiczna. Z drugiej strony metoda finalize () ma chroniony specyfikator dostępu, tak aby nie był dostępny dla żadnego członka 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 przechowywanych przez obiekt natychmiast.

Wniosek:

Zalecane jest użycie metody dispose () nad metodą finalize (), ponieważ jest ona szybsza niż finalizacja. W razie potrzeby można go również nazwać dowolnym czasem.

Top