2012-01-06 5 views
0

Можно создать дубликат:
Finalize vs DisposeDispose Доработка и деструкторы

Dispose - Это освободит память объекта и GC должен быть supperessed в этом случае.

Finalize - В случае, если объект не расположен, и когда объект выходит из области действия (я имею в виду, когда класс выходит за рамки), GC скажет Finalize, чтобы очистить его.

Деструктор - Не знаю. Можете ли вы объяснить разницу b/w деструкторов и финализировать?

+0

Финализатор является мягким версией C# на дескрипторе, хотя между ними смешанный язык. –

ответ

1

финализац
Он используется сборщик мусора неявно, чтобы освободить пространство.

Destructor
Он используется для уничтожения значения переменной.

+0

Подробнее о [http://stackoverflow.com/questions/456213/destructor-vs-idisposable] и [http://stackoverflow.com/questions/8753205/dispose-finalize-and-destructors/8753255#8753255] –

1

Деструктор неявно вызывает завершение, поэтому это своего рода предварительная финализация.

Для получения более подробной информации см. MSDN. Один важный лакомый кусок из этой документации:

Даже при таком явном контроле над ресурсами деструктор становится защитой для очистки ресурсов, если вызов метода Dispose завершился неудачно.

2

Dispose не может высвободить память. Метод Dispose() освобождает или закрывает неуправляемые ресурсы.

1

Descrtuctor находится на C++, а финализаторы находятся в .NET. Несмотря на то, как вы представляете финализатор в коде C#, выглядит как дескриптор C++, но это не одно и то же, и его поведение тоже отличается.

Завершение - последний процесс, который происходит в управлении памятью .NET. Утилизация - это шаблон, который очищает неуправляемую память. Помните, что Dispose - это операция, выполняемая вручную или явно называемая базой, тогда как финализатор - нет. Это время работает автоматически.

Вы можете прочитать this

+0

Должен ли я подавить финализацию деструкторов gc.suppressfinalize, поскольку как финализация, так и деструкторы, похоже, очищают память? – Pankaj

+0

Если ваш следующий стандартный шаблон Dispose, предложенный MSDN, то нужно подавить финализацию, поскольку процесс завершения очень дорогостоящий, и его выполнение дважды является ненужным и несколько раз проблематичным. Так что, если вы очищаете память самостоятельно, то почему GC должен сделать еще один раунд для того, чтобы сделать то же самое? – Zenwalker

+0

Спасибо. Понял – Pankaj