Я столкнулся с несколькими исключениями OutOfMemoryException с моим приложением C # / WPF, и я сталкиваюсь с некоторыми запутанными данными, пытаясь профилировать использование памяти.
Когда приложение, как правило, работает, диспетчер задач Windows показывает использование памяти где-то около 34 МБ (слегка отскакивает при создании объектов и сборке мусора). Когда я запускаю приложения для профилирования памяти, такие как CLR Profiler и dotTrace Memory , они показывают общее использование памяти на уровне около 1,2 МБ.
Почему это огромное расхождение? Что диспетчер задач видит, что эти профилировщики не видят?
ОБНОВЛЕНИЕ: Я добавил некоторый код diag в свое приложение, чтобы время от времени выводить различную информацию о памяти через класс Process.
Во время работы моего приложения я установил правило в DebugDiag , чтобы выполнить дамп памяти в случае исключения. Я вызвал исключение, и произошел дамп памяти. На этом этапе использование памяти моим приложением (как показывает диспетчер задач) подскочило с 32 МБ до 145 МБ и осталось там.
Вы можете увидеть этот скачок в таблице ниже (WorkingSet64). Я все еще пытаюсь разобраться во всех типах информации о памяти, предоставляемой классом Process. Как внешнее приложение может заставить рабочий набор моего приложения расти таким образом?
Ссылка на таблицу данных здесь.