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