Подтвердить что ты не робот

Есть ли способ получить текущее использование памяти приложения С#?

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

4b9b3361

Ответ 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 в моем случае).