какой класс вызывает SuppressFinalize в своем конструкторе, так что ваш вызов dispose бесполезен? - PullRequest
1 голос
/ 25 октября 2011

Есть некоторые классы, такие как DataTable, которые уже вызвали SuppressFinalize в своем конструкторе, и поэтому нет смысла вызывать dispose / use с помощью него. (потому что утилита предназначена для освобождения раньше, но освобождать нечего)

Итак, я хочу узнать список таких классов или способ найти список таких классов по рефлексии?

1 Ответ

6 голосов
/ 25 октября 2011

Ваш вопрос неверен. Вызов SuppressFinalize не имеет никакого отношения к полезности Dispose. Метод Dispose по-прежнему будет делать все, что написано в нем, когда вы вызываете его, явно или через блок using.

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

...