Есть ли способ получить текущее использование памяти приложением C #? - PullRequest
26 голосов
/ 20 января 2009

Я автоматизирую некоторые задачи профилирования и хочу в реальном времени регистрировать пространство кучи и размеры генерации. API профилирования кажется очень сложным для того, что мне нужно, и, похоже, учитывает отдельные распределения и коллекции, что не так важно для меня. Инструменты профилирования, конечно, очень помогают, но я искал более гибкий, программируемый интерфейс.

Ответы [ 3 ]

39 голосов
/ 20 января 2009

Термин «текущее использование памяти» определен слабо. Вы имеете в виду рабочий набор? Что бы это ни значило, вы можете использовать различные свойства, такие как VirtualMemorySize, WorkingSet, PrivateMemorySize и т. Д. Из класса процесса, чтобы получить его.

long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
6 голосов
/ 20 января 2009

Для большинства этих вещей есть счетчики производительности, и если вы не можете использовать Perfmon, вы можете получить доступ к счетчикам через API диагностики.

3 голосов
/ 04 ноября 2014

Как только мне пришлось обнаружить утечку памяти в устаревшем коде, я наткнулся на это решение: Запустите «список задач» с соответствующими параметрами как процесс и прочитайте вывод из потока или из файла.

, например

tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH

Вывод:

"notepad++.exe","7132","Console","1","21.004 K"

Не очень элегантно, но работает на любом языке программирования в Windows без дополнительных зависимостей (C ++ / Qt в моем случае).

...