Обнаружение «просочившихся» объектов IDisposable

Есть много вопросов, ТАК спрашивающих, как обнаружить утечку IDisposable объектов. Кажется, что ответ «вы не можете» .

Я только что проверил с помощью самого тривиального тестового примера, что FxCop 10. 0 этого не делает, ReSharper 4 с MSVS2010 этого не делает.

Это кажется мне неправильным, хуже, чем утечки памяти в C (для которых, по крайней мере, мы создали инструменты для обнаружения).

Я был размышление: Возможно ли, используя отражение и другие непонятные продвинутые методы, я могу внедрить проверку во время выполнения в финализатор, чтобы узнать, был ли вызван Dispose ?

Как насчет фокусов с WinDBG + SOS?

Даже если для этого нет инструментов, я хотел бы знать, возможно ли это теоретически (мой C # не очень точен).

Идеи?

ПРИМЕЧАНИЕ Название этого вопроса могло ввести в заблуждение. Настоящий вопрос здесь должен заключаться в , был ли объект IDisposable Disposed () правильно . Удаление с помощью GC не считается, поскольку я считаю это ошибкой.

Edit : Решение: .NET Memory Profiler выполняет свою работу. Нам просто нужно спамить несколько GC.Collect () в конце программы, чтобы наш профилировщик мог правильно собирать статистику.

11
задан Community 23 May 2017 в 12:16
поделиться