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