Инструменты для поиска полного решения для IDisposable объектов, которые не были утилизированы - PullRequest
6 голосов
/ 02 апреля 2011

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

Кто-нибудь знает об инструменте, который просматривает решение ac # и находит все места, где одноразовый объект не сохранился?был утилизирован?Я могу видеть случаи, когда это не работает, когда объекту нравятся точечные рисунки, назначенные свойствам, но даже более простой инструмент проверки будет иметь значение.

Спасибо за ваше время.

Ответы [ 4 ]

11 голосов
/ 02 апреля 2011

Я обнаружил, что Visual Studio 2010 может делать именно то, что я искал.Чтобы получить поведение, выполните следующие действия:

  • Создайте новый набор правил анализа кода, как описано в Как: создать пользовательский набор правил
  • Добавитьследующие правила к вашему набору правил:

    • Утилизируйте объекты перед потерей области действия
    • Не удаляйте объекты несколько раз
    • Одноразовые поля должны быть удалены
    • Методы Dispose должны вызывать базовый класс dispose

Или просто запускать их как часть ваших общих правил анализа кода.Он не будет ловить все, но это лучшая сеть безопасности, чем никакая сеть безопасности.

0 голосов
/ 02 апреля 2011

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

Если область действия вашего одноразового предмета недолговечна и, возможно, содержится где-то в одной небольшой части метода, оберните его с помощью использования, чтобы гарантировать его удаление. Я использую (это грамматически правильно?) Любой шанс, который я получаю.

Очевидно, что это не автоматические предложения и не всегда будут работать, но нетрудно быть в правильном мышлении и изучать лучшие практики, которые вы можете применять в повседневной работе. Это мои два цента.

0 голосов
/ 02 апреля 2011

Предполагая, что вы используете рекомендуемый шаблон подавления финализации, когда Dispose вызывается вручную, вы можете обнаружить эти ошибки, добавив немного кода, чтобы сообщить вам, когда Dispose вызывается в потоке финализатора.*

Также возможно использование профилировщика памяти, предложенного BrandonZeider.ANTS отличный, хотя и несколько дорогой, профилировщик.Jetbrains также делают хороший профилировщик, и вы можете попробовать оба в течение 30 дней без покупки.

0 голосов
/ 02 апреля 2011

Мой любимый профилировщик памяти - Ants Profiler из Redgate . Это довольно просто в использовании, и у них есть много учебников, чтобы вы начали. Лучше всего - 14-дневная бесплатная пробная версия, поэтому вы можете попробовать ее и убедиться, что она сработает для вас, прежде чем купить ее.

...