Получение использования оперативной памяти процесса - PullRequest
19 голосов
/ 09 мая 2009

У меня возникли проблемы с выяснением того, как именно я получаю данные об использовании процесса. (Сколько оперативной памяти он потребляет в настоящее время, а не сколько зарезервировано или его максимальное или минимальное значение)

Допустим, у меня на заднем плане запущен процесс Java.exe, ему разрешено использовать 1024 Мб оперативной памяти, как узнать, сколько оперативной памяти он использует в данный момент.

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

Ответы [ 3 ]

38 голосов
/ 17 февраля 2013

Я нашел это на MSDN и он работает

System.Diagnostics.Process proc = assign your process here :-)

int memsize = 0; // memsize in Megabyte
PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = proc.ProcessName;
memsize = Convert.ToInt32(PC.NextValue()) / (int)(1024);
PC.Close();
PC.Dispose();
18 голосов
/ 09 мая 2009

Если вы просто заинтересованы в физической памяти, вам, вероятно, понадобится WorkingSet64 , который дает «объем физической памяти, выделенный для связанного процесса». Поймите, что это значение постоянно колеблется, и значение, которое дает этот вызов, может быть не актуальным. Вы также можете быть заинтересованы в PeakWorkingSet64 , который дает «максимальный объем физической памяти, используемый связанным процессом».

0 голосов
/ 22 августа 2018

отлично, я хотел, чтобы это получилось так же, как показано в диспетчере задач, и попытался:

Process.PrivateMemorySize64
Process.PeakVirtualMemorySize64
Process.PeakPagedMemorySize
Process.PagedSystemMemorySize64
Process.PagedMemorySize64
Process.NonpagedSystemMemorySize64
Process.WorkingSet64

и ни один из них не работал , но Счетчик производительности работает!

PerformanceCounter PC = new PerformanceCounter();
PC.CategoryName = "Process";
PC.CounterName = "Working Set - Private";
PC.InstanceName = "processNameHere";
memsize = Convert.ToInt32(PC.NextValue()) / (int)(1024);
PC.Close();
PC.Dispose();

Большое спасибо!

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