Різниця між розпорядженням () та завершенням () у C #

Автор: Laura McKinney
Дата Створення: 2 Квітень 2021
Дата Оновлення: 1 Травень 2024
Anonim
Датчик открытия Aqara T1 MCCGQ12LM - новая версия с Zigbee 3.0
Відеоролик: Датчик открытия Aqara T1 MCCGQ12LM - новая версия с Zigbee 3.0

Зміст


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

  1. Порівняльна діаграма
  2. Визначення
  3. Ключові відмінності
  4. Висновок

Порівняльна діаграма

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


Визначення розпорядження ()

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

public void dispose () {// Код розпорядження тут}

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

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


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

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

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

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

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

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

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

Висновок:

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