Разница между dispose () и finalize () в C #
Содержание
Методы dispose () и finalize () - это методы C #, которые вызываются для освобождения неуправляемых ресурсов, удерживаемых объектом. Метод dispose () определен внутри интерфейса IDisposable, тогда как метод 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 () определен в интерфейсе IDisposable, С другой стороны, метод finalize () определен в классе объект.
- Метод dispose () должен вызываться вручную внутри кода программистом, в то время как метод finalize автоматически вызывается сборщиком мусора до того, как он уничтожит объект.
- Метод dispose может быть вызван в любое время, в то время как метод finalize вызывается сборщиком мусора, когда он обнаруживает, что на этот объект не ссылались в течение длительного времени.
- Метод dispose () реализуется в классе после реализации интерфейса IDisposable. Метод finalize () должен быть реализован только для неуправляемые ресурсы потому что управляемые ресурсы автоматически освобождаются сборщиком мусора.
- Спецификатор доступа метода dispose () является открытым, поскольку он определен в интерфейсе IDisposable, и он будет реализован классом, реализующим этот интерфейс, следовательно, он должен быть открытым. С другой стороны, метод finalize () имеет защищенный спецификатор доступа, поэтому он не должен быть доступен ни одному члену вне класса.
- Метод dispose () является быстрым и освобождает объект мгновенно, следовательно, он не влияет на стоимость производительности. Метод finalize () медленнее и не освобождает ресурсы, удерживаемые объектом мгновенно.
Заключение:
Рекомендуется использовать метод dispose () над методом finalize (), так как он быстрее, чем finalize. Кроме того, он может быть вызван в любое время, когда это необходимо.