Влияют ли деструкторы на производительность? - PullRequest
1 голос
/ 14 февраля 2020

Я добавил деструктор в один из моих базовых классов, который я использую для поиска утечек памяти, например так:

#if DEBUG
~BaseViewModel()
{
    Debug.WriteLine("View Model Disposed");
}
#endif

Даже удаление Debug.WriteLine кода

Будет иметь присутствующие деструкторы влияют на производительность для отладочной сборки?

1 Ответ

3 голосов
/ 18 февраля 2020

Согласно документации Microsoft

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

Вам нужен деструктор (финализатор), только если у вас есть неуправляемые ресурсы в вашем классе. И если вы добавите деструктор, вы должны запретить финализацию в Dispose. В противном случае это приведет к тому, что ваши объекты будут находиться в памяти дольше, потому что они будут добавлены в очередь финализатора. (Примечание: Прочтите, как работает финализация ).

...