Препоръчано, 2020

Избор На Редактора

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

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

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

Основа за сравнениеdispose ()финализиране ()
ДефинираниМетод dispose () се дефинира в интерфейса IDisposable на интерфейса.IDът Finalize () е дефиниран в java.lang.object клас.
Синтаксисpublic void Dispose () {
// Изхвърлете кода тук
}
защитена void finalize () {
// финализиране на кода тук
}
СложенМетод dispose () се извиква от потребителя.Методът finalize () се извиква от колектора на боклука.
ПредназначениеМетод dispose () се използва за освобождаване на неуправлявани ресурси, когато се извиква.Метод finalize () се използва за освобождаване на неуправлявани ресурси, преди обектът да бъде унищожен.
изпълнениеМетод dispose () трябва да се прилага винаги, когато има метод close ().Методът finalize () трябва да се приложи за неуправлявани ресурси.
Спецификатор за достъпМетод dispose () е обявен за публичен.Методът finalize () е обявен за частен.
действиеМетодът dispose () е по-бърз и моментално разпорежда обект.Финализирането на метода е по-бавно в сравнение с изхвърлянето
производителностМетодът () извършва незабавно действие, следователно не оказва влияние върху ефективността на уебсайтовете.По-бавният метод finalize () влияе на производителността на уебсайтовете.

Дефиниция на dispose ()

Методът dispose () освобождава неуправляваните ресурси, които се държат от обект от класа. Неуправляваните ресурси са файлове, връзки за данни и т.н. Метод dispose () е деклариран в интерфейса IDisposeable и се изпълнява от класа чрез прилагане на интерфейса IDisposable. Този метод не се извиква автоматично. Програмистът трябва да го приложи ръчно, когато създавате потребителски клас, който ще се използва от други. Методът има следния синтаксис:

 public void dispose () {// Изхвърлете кода тук} 

В горния синтаксис можете да видите, че методът е обявен за публичен. Това е така, защото този метод е дефиниран в интерфейса IDisposable и трябва да бъде реализиран от класа, който изпълнява този интерфейс. Така че, за да се осигури достъпност на класа на прилагане, методът се обявява за публичен.

Този метод се извиква ръчно от кода на програмата, тъй като е реализиран за извикване. Производителността на методите е бърза и незабавно освобождава ресурсите, държани от обекта на класа.

Определение за финализиране ()

Методът finalize () се дефинира в класа на обекта . Използва се за дейности по почистване. Този метод се извиква от колектора за боклук, когато позоваването на обект не се използва дълго време. Сборникът за боклук освобождава управляваните ресурси автоматично, но ако искате да освободите неуправляваните ресурси като файлова дръжка, връзка за данни и т.н., методът за финализиране трябва да се приложи ръчно. Събирачът на боклука извиква метода finalize () точно преди напълно да унищожи обекта.

Синтаксисът на метода finalize ():

 protected void finalize () {// тук финализиращия код} 

В синтаксиса по-горе методът finalize () е обявен за защитен. Причината за това е, че методът finalize () не трябва да е достъпен извън клас, а трябва да бъде достъпен само за колектора на боклука.

Методът finalize () влияе върху цената на производителността, тъй като не освобождава незабавно паметта. В C # методът finalize се извиква автоматично с деструктори.

Ключови разлики между dispose () и finalize ()

  1. Метод dispose () е дефиниран в интерфейс IDisposable . От друга страна методът finalize () се дефинира в обекта клас.
  2. Метод dispose () трябва да бъде ръчно извикан вътре в кода от програмист, докато методът final се извиква автоматично от събирача на боклука, преди да унищожи обекта.
  3. Методът dispose може да бъде извикан по всяко време, докато методът finalize се извиква от сборника за боклук, когато установи, че този обект не е бил препращан дълго време.
  4. Методът dispose () е реализиран в клас след прилагане на интерфейса IDisposable. Методът finalize () трябва да се прилага само за неуправлявани ресурси, тъй като управляваните ресурси се освобождават автоматично от събирача на отпадъци.
  5. Спецификаторът за достъп на метода dispose () е публичен, тъй като е дефиниран в интерфейса IDisposable и ще бъде реализиран от класа, който изпълнява този интерфейс, следователно трябва да е публичен. От друга страна, метод finalize () има защитен спецификатор за достъп, така че да не е достъпен за нито един член извън класа.
  6. Методът dispose () е бърз и освобождава обекта незабавно, следователно не засяга цената на изпълнение. Методът finalize () е по-бавен и не освобождава ресурсите, държани от обекта, незабавно.

Заключение:

Препоръчва се да се използва метод dispose () над метода finalize (), тъй като той е по-бърз от финализирането. Също така, може да се нарича по всяко време, когато е необходимо.

Top