Рекомендуем, 2020

Выбор редакции

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

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

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

Основа для сравненияраспоряжаться ()финализировать ()
определенныйМетод 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 вызывается автоматически с деструкторами.

Ключевые различия между 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 (), так как он быстрее, чем finalize. Кроме того, он может быть вызван в любое время, когда это необходимо.

Top