Можно ли установить Resharper для предупреждения, если IDisposable не обрабатывается правильно?
Есть ли параметр в Resharper 4 (или даже сама Visual Studio …), который вызывает предупреждение, если я забываю обернуть код в using
блоке или опустить соответствующий вызов Dispose в блоке finally
?
- Как распечатать элементы вектора C ++ в GDB?
- Что такое аргумент BOOL * stop для enumerateObjectsUsingBlock: используется для?
- Каковы некоторые виды использования decltype (auto)?
- Как resize изображения в Qt?
- Программно шифрование конфигурационного файла в .NET.
- Является ли инициализация статической членской переменной C ++ streamобезопасной?
- Возникает ли эффект при вызове ToList ()?
- Double.TryParse или Convert.ToDouble - что быстрее и безопаснее?
Правильный автоматический анализ Dispose требует DFA (анализ streamа данных) глобальным способом. Маловероятно, что вы создаете объект IDisposable и не вызываете на нем никакого метода и не передаете его в качестве аргумента. Если одноразовый объект передается другим методам (включая вызов его членов, когда «это» неявно передается), инструмент должен проанализировать, не вызывается ли Dispose внутри, или что этот объект не хранится где-то для последующего удаления.
Тем не менее, наивная реализация проверки того, действительно ли располагаемый объект фактически размещен с конструкцией «использования» или каким-либо другим способом, даст слишком много ложных срабатываний и сделает анализ бесполезным.
Недовольство существующими методами, я создал свой собственный: EyeDisposable . Это прибор для ИИ, поэтому он должен улавливать много утечек, не попавших под статический анализ. Это все еще на ранней стадии.
Вы можете создать небольшую надстройку для R #, которую вы могли бы запустить внутри редактора кода, который сканирует код и обновляет анализ кода, чтобы отразить то, что вы являетесь объектом, у которого отсутствует структура, которую вы только что описали.
Я бы рассмотрел архитектуру плагина R #, если вы решите пойти по этому маршруту.
См. Это сообщение в блоге для некоторых трюков для тестирования Dispose()
в DEBUG
. В принципе, напишите деструктор только для DEBUG, который утверждает, что вы были утилизированы.
Вы можете посмотреть на FXCop для этого: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx
Жаль, что R # не справляется с этим, даже если это предупреждение для полей вашего classа и / или переменных, которые вы создаете.