Нахождение истинного объема памяти приложения Windows - PullRequest
2 голосов
/ 16 марта 2011

Я столкнулся с несколькими исключениями OutOfMemoryException с моим приложением C # / WPF, и я сталкиваюсь с некоторыми запутанными данными, пытаясь профилировать использование памяти.

Когда приложение, как правило, работает, диспетчер задач Windows показывает использование памяти где-то около 34 МБ (слегка отскакивает при создании объектов и сборке мусора). Когда я запускаю приложения для профилирования памяти, такие как CLR Profiler и dotTrace Memory , они показывают общее использование памяти на уровне около 1,2 МБ.

Почему это огромное расхождение? Что диспетчер задач видит, что эти профилировщики не видят?

ОБНОВЛЕНИЕ: Я добавил некоторый код diag в свое приложение, чтобы время от времени выводить различную информацию о памяти через класс Process.

Во время работы моего приложения я установил правило в DebugDiag , чтобы выполнить дамп памяти в случае исключения. Я вызвал исключение, и произошел дамп памяти. На этом этапе использование памяти моим приложением (как показывает диспетчер задач) подскочило с 32 МБ до 145 МБ и осталось там.

Вы можете увидеть этот скачок в таблице ниже (WorkingSet64). Я все еще пытаюсь разобраться во всех типах информации о памяти, предоставляемой классом Process. Как внешнее приложение может заставить рабочий набор моего приложения расти таким образом?

Ссылка на таблицу данных здесь.

Ответы [ 2 ]

8 голосов
/ 23 марта 2011

Используя некоторые из предложенных здесь инструментов диагностики, а также профилировщик памяти ANTS (что так дорого), я нашел источник утечки.

  1. WPFУтечка анимации раскадровки в .NET 3.5
  2. Класс WPF BitmapEffect может вызвать утечки.Альтернативный класс «Эффект» устраняет утечку. Link , Link
  3. XAML Объединенные словари ресурсов могут вызвать утечку. Ссылка , Ссылка
  4. Объем памяти приложения в «Рабочем наборе» (память, отображаемая диспетчером задач) не является хорошим показателем занимаемой площади вашего процесса.Внешние приложения могут влиять на это. Ссылка

Инструменты профилирования памяти помогли мне обнаружить, что утечки в основном происходили из-за неуправляемого кода, что очень затрудняло поиск.Устранение этих утечек, а также лучшее понимание памяти Windows (частная или рабочая среда) прояснили ситуацию.

5 голосов
/ 16 марта 2011

Prcess Explorer и VMMap , оба из Sysinternals Suite Марка Руссиновича.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...