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