Есть много вопросов, которые спрашивают, как обнаружить утечку IDisposable. Кажется, что ответ "вы не можете" .
Я только что проверил с самым тривиальным тестовым случаем, что FxCop 10.0 этого не делает, ReSharper 4 с MSVS2010 этого не делает.
Это кажется мне неправильным, хуже утечек памяти в C (для которых по крайней мере мы установили инструменты для обнаружения).
Я думал: возможно ли, используя рефлексию и другие неясные передовые методы, я могу ввести проверку во время выполнения, в финализаторе, чтобы узнать, был ли вызван Dispose
?
Как насчет волшебных трюков с помощью WinDBG + SOS?
Даже если для этого нет существующих инструментов, я хотел бы знать, возможно ли это теоретически (мой С# не очень острый).
Идеи?
ПРИМЕЧАНИЕ Этот заголовок вопроса, возможно, вводит в заблуждение. Реальный вопрос здесь должен состоять в том, был ли объект IDisposable
правильным Disposed()
. Устранение GC не считается, поскольку я считаю это ошибкой.
Изменить: Решение:.NET Memory Profiler выполняет эту работу. Нам просто нужно спамить несколько GC.Collect()
в конце программы, чтобы наш профилировщик мог правильно подобрать статистику.