IDisposable - автоматическая проверка использования конструкции - PullRequest
3 голосов
/ 02 июня 2011

Кто-нибудь знает способ автоматического поиска любой переменной, где тип реализует IDisposable, но конструкция using не используется?

т. способ проверить наличие потенциально неопубликованных неуправляемых ресурсов?

Кроме того, возможно ли увидеть количество и типы ресурсов, хранящихся в запущенном приложении?

Ответы [ 2 ]

4 голосов
/ 02 июня 2011

Для этого есть правило анализа кода:

http://msdn.microsoft.com/en-us/library/ms182289%28VS.100%29.aspx

Это можно запустить из VS 2010 Premium или Ultimate или отдельно с помощью FxCop:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=917023f6-d5b7-41bb-bbc0-411a7d66cf3c

Еще одна вещь, которую я видел, - это захват трассировки стека при создании объекта IDisposable, а затем, если завершено нажатие (то есть Dispose() не было вызвано), регистрирует ошибку с созданным стекомслед.Это дорого, так что вы можете захотеть сделать это только в процессе разработки или начать собирать трассировки стека во второй раз, когда ваше приложение столкнется с этой проблемой (если вы столкнетесь с ней один раз, вы, скорее всего, столкнетесь с ней много раз водиночное выполнение приложения).Этот метод работает для IDisposable экземпляров, которые живут дольше (не только локальные переменные).Конечно, это также работает только для пользовательских IDisposable объектов, поскольку требует специального кода в конструкторе / dispose / finalizer.

1 голос
/ 02 июня 2011

VS 2010 анализатор кода и FxCop?(не уверен) Правила надежности сделают довольно хорошую работу по обнаружению, если в анализируемом коде существуют пути выполнения, где объекты, реализующие IDisposable, выходят из области видимости, не вызывая Dispsoe() (это слишком много и во многих случаях обнаружит ложноеположительные результаты).

Это, конечно, не приведет к тому, что конструкция using как правильно реализованный блок try-finally пройдет тест (оба явно эквивалентны под капотом, поэтому я не уверен, что этопроблема).

EDIT : FX Cop не поддерживает это предупреждение.Он доступен с VS 2005 анализатор кода.

...