Рекомендуємо, 2024

Вибір Редакції

Різниця між dispose () та finalize () у C #

Методи dispose () і finalize () є методами C #, які викликаються для звільнення некерованих ресурсів, що знаходяться в об'єкті. Метод dispose () визначається всередині інтерфейсу IDisposable, тоді як метод finalize () визначається всередині об'єкта класу. Основна відмінність між dispose () і finalize () полягає в тому, що метод dispose () повинен явно викликатися користувачем, тоді як метод finalize () викликається збирачем сміття, безпосередньо перед тим, як об'єкт буде знищений. Давайте вивчимо деякі інші відмінності між ними за допомогою діаграми порівняння, показаної нижче.

Діаграма порівняння

Основа для порівнянняdispose ()завершити ()
ВизначенийМетод dispose () визначається в інтерфейсі IDisposable інтерфейсу.Ідентифікатор методу finalize () визначений у класі java.lang.object.
Синтаксисpublic void Dispose () {
// Вилучити код тут
}
захищений недійсний finalize () {
// завершення коду тут
}
ВикликаєтьсяМетод dispose () викликається користувачем.Метод finalize () викликається збирачем сміття.
ПризначенняМетод dispose () використовується для звільнення некерованих ресурсів, коли він викликається.Метод finalize () використовується для звільнення некерованих ресурсів, перш ніж об'єкт буде знищений.
РеалізаціяМетод dispose () повинен бути реалізований кожного разу, коли існує метод close ().Метод finalize () повинен бути реалізований для некерованих ресурсів.
Специфікатор доступуМетод dispose () оголошений публічним.Метод finalize () оголошений приватним.
ДіяМетод dispose () є більш швидким і миттєво розпоряджається об'єктом.Метод finalize повільніше порівняно з розпорядженням
ПродуктивністьМетод dispose () виконує миттєву дію, отже, не впливає на продуктивність веб-сайтів.Метод finalize () повільніше впливає на продуктивність веб-сайтів.

Визначення dispose ()

Метод dispose () випускає некеровані ресурси, які зберігаються об'єктом класу. Некеровані ресурси - це файли, з'єднання даних і т.д. Метод dispose () оголошується в інтерфейсі IDisposeable і реалізується класом шляхом реалізації інтерфейсу IDisposable. Цей метод не викликається автоматично. Програміст повинен реалізувати його вручну, коли ви створюєте користувальницький клас, який буде використовуватися іншими. Метод має такий синтаксис:

 public void dispose () {// Вилучити код тут} 

У наведеному вище синтаксисі можна спостерігати, що метод оголошений публічним. Це тому, що цей метод визначається в інтерфейсі IDisposable і він повинен бути реалізований класом, який реалізує цей інтерфейс. Таким чином, щоб забезпечити доступність класу-реалізації, метод оголошується як публічний.

Цей метод викликається вручну кодом програми, оскільки він реалізований для виклику. Продуктивність методів є швидкою, і вона миттєво звільняє ресурси, що утримуються об'єктом класу.

Визначення завершення ()

Метод finalize () визначається в класі об'єкта . Він використовується для очисних дій. Цей метод викликається збирачем сміття, коли посилання на об'єкт не використовується протягом тривалого часу. Збирач сміття звільняє керовані ресурси автоматично, але якщо ви хочете звільнити некеровані ресурси, такі як ручка файлу, з'єднання даних і т.д., метод finalize повинен бути реалізований вручну. Збирач сміття викликає метод finalize () безпосередньо перед тим, як повністю знищить об'єкт.

Синтаксис методу finalize ():

 protected void finalize () {// тут код завершення} 

У синтаксисі вище, метод finalize () оголошується як захищений. Причина цього полягає в тому, що метод finalize () не повинен бути доступним за межами класу, і він повинен бути доступним тільки для збирача сміття.

Метод finalize () впливає на вартість продуктивності, оскільки він не звільняє пам'ять миттєво. У C # метод finalize викликається автоматично з деструкторами.

Ключові відмінності між dispose () і finalize ()

  1. Метод dispose () визначається в інтерфейсі IDisposable . З іншого боку, метод finalize () визначається в об'єкті класу.
  2. Метод dispose () повинен бути вручну викликаний програмістом всередині коду, тоді як метод finalize автоматично викликається збирачем сміття, перш ніж він знищить об'єкт.
  3. Метод dispose може бути викликаний в будь-який час, тоді як метод finalize викликається збирачем сміття, коли він виявляє, що цей об'єкт не був посиланням протягом тривалого часу.
  4. Метод dispose () реалізується в класі після реалізації інтерфейсу IDisposable. Метод finalize () повинен бути реалізований тільки для некерованих ресурсів, оскільки керовані ресурси автоматично звільняються від збирача сміття.
  5. Специфікатор доступу методу dispose () є публічним, оскільки він визначений в інтерфейсі IDisposable і він буде реалізований класом, який реалізує цей інтерфейс, отже, він повинен бути публічним. З іншого боку, метод finalize () має захищений специфікатор доступу, так що він не повинен бути доступним для будь-якого члена поза класом.
  6. Метод dispose () є швидким і звільняє об'єкт миттєво, отже, це не впливає на вартість продуктивності. Метод finalize () є більш повільним і не звільняє ресурсів, що знаходяться в об'єкті, миттєво.

Висновок:

Пропонується використовувати метод dispose () над методом finalize (), оскільки він швидше завершений. Крім того, його можна назвати в будь-який час, коли це буде необхідно.

Top