Я автоматизирую некоторые задачи профилирования и хочу записывать пустое пространство и размеры поколений в реальном времени. API профилирования кажется ужасно сложным для того, что мне нужно, и, похоже, он прослушивает отдельные распределения и коллекции, что для меня не так важно, Конечно, инструменты профилирования - отличная помощь, но я искал более гибкий, программируемый интерфейс.
Есть ли способ получить текущее использование памяти приложения С#?
Ответ 1
Термин "текущее использование памяти" немного слабо определен. Вы имеете в виду рабочий набор? Независимо от того, что это означает, вы можете использовать различные свойства, такие как VirtualMemorySize
, WorkingSet
, PrivateMemorySize
и т.д. Из класса процесса для его получения.
long workingSet = System.Diagnostics.Process.GetCurrentProcess().WorkingSet64;
Ответ 2
Для этого есть счетчики производительности, и если вы не можете использовать Perfmon, вы можете получить доступ к счетчикам через API диагностики.
Ответ 3
Как только мне пришлось найти утечку памяти в устаревшем коде, я столкнулся с этим решением: Запустите "список задач" с соответствующими параметрами в качестве процесса и прочитайте вывод либо из потока, либо из файла.
например.
tasklist /fi "IMAGENAME eq notepad++.exe" /FO CSV /NH
Выход:
"notepad++.exe","7132","Console","1","21.004 K"
Не тот элегантный, но работает на любом языке программирования на Windows без дополнительных зависимостей (С++/Qt в моем случае).