Подтвердить что ты не робот

Можно ли установить Resharper для предупреждения, если IDisposable не обрабатывается правильно?

Есть ли параметр в Resharper 4 (или даже сама Visual Studio...), который вызывает предупреждение, если я забуду обернуть код в блоке using или опустить соответствующий вызов Dispose в блоке finally?

4b9b3361

Ответ 1

Корректный автоматический анализ Dispose требует DFA (анализ потока данных) глобальным способом. Маловероятно, что вы создаете объект IDisposable и не вызываете на нем никакого метода и не передаете его в качестве аргумента. Если одноразовый объект передается другим методам (включая вызов его членов, когда "this" неявно передается), инструмент должен проанализировать, не вызывается ли Dispose внутри, или что этот объект не хранится где-то для последующего удаления.

Тем не менее, наивная реализация проверки того, действительно ли располагаемый объект фактически размещен с конструкцией "using" или каким-либо другим способом, даст слишком много ложных срабатываний и сделает анализ бесполезным.

Ответ 2

Недовольство существующими методами, я создал свой собственный: EyeDisposable. Это измеритель ИЛ, поэтому он должен улавливать много утечек, не зараженных статическим анализом. Он все еще находится на ранней стадии, приветствуются inpuit.

Ответ 3

Вы можете создать небольшую надстройку для R #, которую вы могли бы запустить внутри редактора кода, который сканирует код и обновляет анализ кода, чтобы отразить то, что вы являетесь объектом, у которого отсутствует структура, которую вы только что описали.

Я бы заглянул в архитектуру плагина R #, если вы решите пойти по этому маршруту.

Ответ 4

Смотрите это сообщение в блоге для некоторых трюков для тестирования Dispose() в DEBUG. В принципе, напишите деструктор только для DEBUG, который утверждает, что вы были удалены.

Ответ 5

Вы можете посмотреть на FXCop для этого: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

Жаль, что R # не обрабатывает его, даже если это просто предупреждение для полей в вашем классе и/или переменных, которые вы создаете.