У мовах програмування об'єкт може мати змінну лише протягом свого існування, після інстанціфікації його неможливо змінити. Таким чином, та сама комірка пам'яті не може бути призначена новим значенням, тому для управління невикористаними просторами потрібно якесь автоматизоване управління пам'яттю. Ці невикористані простори називаються сміттям, і весь процес ефективного управління пам’яттю називається збиранням сміття.
Основна мета сміттєзбірника - відокремити мертві предмети від живих об’єктів та повернути простір для повторного використання. В основному, вся справа працює на керованій купі, яка є не що інше, як блок пам'яті, і збирач сміття періодично перевіряє пам'ять купи, щоб виділити пам'ять новим об'єктам. Існує два способи звільнення некерованих ресурсів, таких як файли та підключення до бази даних: Розпорядження та завершення.
Ця стаття допоможе вам зрозуміти різницю між ними.
Розпорядження - це стандартний спосіб, коли користувачі можуть повідомити об’єктам звільнити свої ресурси та не намагатися знову отримати доступ до об'єктів. Метод розпорядження забезпечує контроль явної очищення пам'яті, роблячи об'єкти непридатними.
Коли користувачі викликають метод Dispose (), об'єкт повинен звільнити всі свої дорогі ресурси, тим самим зробивши його доступним для повторного використання. Збірник сміття його ніколи не викликає, який грає лише тоді, коли керована пам'ять стає дефіцитною. Спеціальний інтерфейс під назвою "IDisposable" використовується для того, щоб вирішити, де і як реалізувати Dispose (). Але що трапляється, коли метод утилізації не називається?
Якщо метод знешкодження не викликається, резервний план полягає у використанні методу Finalize () для очищення. Колектор сміття викликає його для остаточного очищення ресурсів, перш ніж це звільнить пам'ять. Поняття своєчасного очищення стає неприйнятним тут, оскільки замість того, щоб негайно виділити пам'ять, об’єкт додається до черги на завершення, щоб потім знищитись. Фіналізація більше схожа на захисний захист, встановлений у випадку помилки програмування, і розпорядження не очищає ресурси, і в такому випадку сміттєзбірник викликає метод Finalize (), щоб видалити недоступні об'єкти в будь-якій послідовності, яка йому подобається.
Метод розпорядження покликаний прискорити випуск некерованих ресурсів, таких як ручки бази даних, ручки файлів, семафори та інші об'єкти, виділені операційною системою. Метод розпорядження застосовується для виконання коду, необхідного для очищення невикористаної пам'яті та обмежених ресурсів, таких як GDI-ручки. Простіше кажучи, метод розпорядження забезпечує контроль очищення явної пам'яті. Метод доопрацювання, з іншого боку, є частиною збору сміття, яка використовується для виконання остаточної операції очищення об'єкта до його збирання. Простіше кажучи, метод доопрацювання викликається звільненням некерованих ресурсів, що зберігаються об'єктом до його знищення.
Метод dispose може бути викликаний явно кодом користувача та класом, який реалізує метод розпорядження ресурсами. Однак пам'ять не може бути звільнена, поки сміттєзбірник не виконає процес очищення. Метод можна назвати, навіть якщо інші посилання на об'єкт все ще існують. Метод завершення, навпаки, може викликати збирач сміття лише після того, як він визначить, що останній екземпляр об'єкта пам'яті знищений і більше ніяких посилань на об'єкт не існує. Після того, як метод завершення буде виконаний, об'єкт видаляється з пам'яті купи.
Процес вилучення об'єкта з пам'яті називається схемою розпорядження, яку можна використовувати для об’єктів, які отримують доступ до некерованих ресурсів, оскільки збирач сміття не в змозі повернути некеровані ресурси. Інтерфейс “IDisposable” разом з додатковим методом Dispose (Boolean) реалізується з проханням звільнити некеровані ресурси. Метод доопрацювання виконується, коли екземпляр об'єкта знищується до його розміщення. Це недетермінований метод, який виникає на розсуд сміттєзбірника і може навіть не виникати. Він не повинен бути реалізований на керованих об'єктах, поки це надзвичайно необхідно.
Набагато швидше використовувати метод утилізації, а не доопрацьовувати для миттєвого знешкодження об’єктів. Деструктори автоматично перетворюються для завершення методу під час виконання. Копій сміття автоматично викликається, коли об'єкт виходить із сфери дії, що зазвичай відбувається, коли екземпляр цього об'єкта знищений. Проблема методу доопрацювання полягає в тому, що це недетермінований сенс, невідомо коли повернути пам'ять, на яку вже не посилаються через збирання сміття. Однак це може не звільнити пам'ять відразу; насправді його ніколи не можна викликати, і це не може бути вимушено виразно.
Основна відмінність між методами розпорядження та доопрацювання полягає в тому, що перший - це детермінований метод, який миттєво розпоряджається об'єктами, коли вони більше не використовуються, а другий - недетермінований метод розподілу некерованих ресурсів, що означає, що це резервний метод звільнення. випадки об'єкта пам'яті, коли вони виходять із сфери застосування перед їх розселенням. Завжди доцільно використовувати метод утилізації протягом остаточного завершення, якщо це вкрай не потрібно.
Іншими словами, finalize - це захисна програма, яка встановлюється для очищення некерованих ресурсів, коли метод викидання не може бути викликаний у разі помилки програмування. Метод доопрацювання викликається сміттєзбірником, коли об’єкт збирається викинути з пам'яті купи.