Разница между dispose () и finalize () в C #

Автор: Laura McKinney
Дата создания: 2 Апрель 2021
Дата обновления: 13 Май 2024
Anonim
#30 Какая разница между методами Finalize и Dispose? Ответ на вопрос собеседования C# / .Net
Видео: #30 Какая разница между методами Finalize и Dispose? Ответ на вопрос собеседования C# / .Net

Содержание


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

  1. Сравнительная таблица
  2. Определение
  3. Ключевые отличия
  4. Заключение

Сравнительная таблица

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


Определение утилизации ()

Метод dispose () освобождает неуправляемые ресурсы, которые содержатся объектом класса. Неуправляемые ресурсы - это файлы, подключения к данным и т. Д. Метод dispose () объявлен в интерфейсе. IDisposeable и это реализуется классом путем реализации интерфейса IDisposable. Этот метод не вызывается автоматически. Программист должен реализовать это вручную, когда вы создаете пользовательский класс, который будет использоваться другими. Метод имеет следующий синтаксис:

public void dispose () {// Утилизировать код здесь}

В приведенном выше синтаксисе вы можете заметить, что метод объявлен как открытый. Это потому, что этот метод определен в интерфейсе IDisposable, и он должен быть реализован классом, который реализует этот интерфейс. Таким образом, чтобы обеспечить доступ к реализующему классу, метод объявлен как открытый.

Этот метод вызывается вручную кодом программы, поскольку он реализован для вызова. Быстродействие методов быстрое, и оно мгновенно освобождает ресурсы, удерживаемые объектом класса.


Определение finalize ()

Метод finalize () определяется в объект класс. Используется для уборки. Этот метод вызывается сборщиком мусора, когда ссылка на объект не используется в течение длительного времени. Сборщик мусора освобождает управляемые ресурсы автоматически, но если вы хотите освободить неуправляемые ресурсы, такие как дескриптор файла, подключение к данным и т. Д., Метод finalize должен быть реализован вручную. Сборщик мусора вызывает метод finalize () непосредственно перед тем, как полностью уничтожить объект.

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

protected void finalize () {// код завершения здесь}

В приведенном выше синтаксисе метод finalize () объявлен как защищенный. Причина этого в том, что метод finalize () не должен быть доступен извне класса и должен быть доступен только сборщику мусора.

Метод finalize () влияет на стоимость производительности, поскольку он не освобождает память мгновенно. В C # метод finalize вызывается автоматически с деструкторами.

  1. Метод dispose () определен в интерфейсе IDisposable, С другой стороны, метод finalize () определен в классе объект.
  2. Метод dispose () должен вызываться вручную внутри кода программистом, в то время как метод finalize автоматически вызывается сборщиком мусора до того, как он уничтожит объект.
  3. Метод dispose может быть вызван в любое время, в то время как метод finalize вызывается сборщиком мусора, когда он обнаруживает, что на этот объект не ссылались в течение длительного времени.
  4. Метод dispose () реализуется в классе после реализации интерфейса IDisposable. Метод finalize () должен быть реализован только для неуправляемые ресурсы потому что управляемые ресурсы автоматически освобождаются сборщиком мусора.
  5. Спецификатор доступа метода dispose () является открытым, поскольку он определен в интерфейсе IDisposable, и он будет реализован классом, реализующим этот интерфейс, следовательно, он должен быть открытым. С другой стороны, метод finalize () имеет защищенный спецификатор доступа, поэтому он не должен быть доступен ни одному члену вне класса.
  6. Метод dispose () является быстрым и освобождает объект мгновенно, следовательно, он не влияет на стоимость производительности. Метод finalize () медленнее и не освобождает ресурсы, удерживаемые объектом мгновенно.

Заключение:

Рекомендуется использовать метод dispose () над методом finalize (), так как он быстрее, чем finalize. Кроме того, он может быть вызван в любое время, когда это необходимо.