1. Особливості
• Обидва методи використовуються для звільнення і очистки unmanaged ресурсів (коннект до бази даних, файлу, нетворк соккети)
• Finalize() представлений у вигляді деструктора. Клас який містить Dispose() метод повинен наслідувати
IDisposable інтерфейс
• Типи значення не можуть містити деструктор
• Finalize() метод викликається автоматично перед тим як Garbage Collector видалить обєкт з кучі. Не можемо виклики метод Finalize() явно в коді. Але викликавши GC.SupressFinalize() вказуэмо шо для даного об'єктi не потрібно викликати метод Finalize()
• Dispose() викликається явно (Explicitly) в коді і автоматично в констркції "using"
• Використання Finalize() знижує перформанс порявняно з використанням Dispose(). Оскільки для об'єкту який містить деструктор зберігається вказівник на цей об'єкт в черзi фіналізації і об'єкт може бути видалиний не скоріше як за 2 рази сборки мусору
2. Використання
• я б викликав Dispose() метод після закінчення операції над певним ресурсом (файл, коннект до бд) для надання можливості іншим об'єктам (програмам) працювати з цим ресурсом. В інакшому випадку операції з ресурсом (файл, коннект до бд) будуть заблокані до моменту коли викличеться фіналізатор (перед видаленням об'єкта Garbage Collector)
• Як на мене очистка unmanaged ресурсів через Finalize() метод є альтернативою (останній шанс) на випадок якшо не був викликаний Dispose() метод.
• Теоретично структури не можуть містити деструктор , тому можна використати Dispose() через наслідування IDisposable інтерфейсу для очистки unmanaged ресурсів в структурах. Але на практиці такий варіант дуже мало ймовірний
• Обидва методи використовуються для звільнення і очистки unmanaged ресурсів (коннект до бази даних, файлу, нетворк соккети)
• Finalize() представлений у вигляді деструктора. Клас який містить Dispose() метод повинен наслідувати
IDisposable інтерфейс
• Типи значення не можуть містити деструктор
• Finalize() метод викликається автоматично перед тим як Garbage Collector видалить обєкт з кучі. Не можемо виклики метод Finalize() явно в коді. Але викликавши GC.SupressFinalize() вказуэмо шо для даного об'єктi не потрібно викликати метод Finalize()
• Dispose() викликається явно (Explicitly) в коді і автоматично в констркції "using"
• Використання Finalize() знижує перформанс порявняно з використанням Dispose(). Оскільки для об'єкту який містить деструктор зберігається вказівник на цей об'єкт в черзi фіналізації і об'єкт може бути видалиний не скоріше як за 2 рази сборки мусору
2. Використання
• я б викликав Dispose() метод після закінчення операції над певним ресурсом (файл, коннект до бд) для надання можливості іншим об'єктам (програмам) працювати з цим ресурсом. В інакшому випадку операції з ресурсом (файл, коннект до бд) будуть заблокані до моменту коли викличеться фіналізатор (перед видаленням об'єкта Garbage Collector)
• Як на мене очистка unmanaged ресурсів через Finalize() метод є альтернативою (останній шанс) на випадок якшо не був викликаний Dispose() метод.
• Теоретично структури не можуть містити деструктор , тому можна використати Dispose() через наслідування IDisposable інтерфейсу для очистки unmanaged ресурсів в структурах. Але на практиці такий варіант дуже мало ймовірний
Комментариев нет:
Отправить комментарий