2014-12-31 3 views
8

Я пытаюсь получить использование памяти моего приложения, но по какой-то причине я получаю различный размер, чем в диспетчере задачКак получить использование памяти приложения, как показано в диспетчере задач?

Я использую:

enter image description here

Диспетчер задач показывает, что мое приложение занимает 45mb, а когда я вытаскиваю его в свой код, я получаю 85mb , как я могу получить тот же размер, что и в диспетчере задач (без использования wmi).

+1

Добавить 'process.Refresh()' перед вызовом 'process.PrivateMemorySize64' –

+0

не помог, получать то же значение как раньше – atikot

+0

windows version? – kennyzx

ответ

6

Предположительно, вы смотрите на неправильный столбец в «Диспетчере задач» или используете неправильное свойство в Pr ocess class ..

Я думаю, вы ищете WorkingSet64 не PrivateMemorySize64. PrivateMemorySize64 - количество виртуальной памяти, выделенное для процесса, а не физическая память. Для использования физической памяти WorkingSet64.

Кроме того, вы должны позвонить process.Refresh() перед тем, как получить доступ к любому из динамических свойств в классе процессов, поскольку он сильно кэшируется.

process.Refresh(); 
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture); 
+0

i добавил обновлять и загружать код во время отладки, так как вы видите, что размер памяти отличается, также нет резких изменений в размере памяти, он довольно стабилен на уровне 45-47mb. – atikot

+0

Не проверяйте память процесса во время отладки. Запустите процесс из отладчика и проверьте. Потому что, когда отладка visual studio будет запускать процесс хостинга для вас * YourProcess.vshost.exe *. Это может вызвать путаницу. Я протестировал это, распечатав вывод на консоли (закончив визуальную студию), и это сработало отлично. Также измените это 'Sleep (200)' на 'Sleep (1000)', чтобы он синхронизировался с диспетчером задач. –

+0

Я стараюсь без визуальной студии и отладки, и это все еще не так, я тоже не вижу vshost в диспетчере задач. – atikot

0

Попробуйте один раз с помощью следующего кода, может быть, это поможет

PerformanceCounter PC = new PerformanceCounter(); 
PC.CategoryName = "ServerProcess"; 
PC.CounterName = "Working Set - Private"; 
PC.InstanceName = JSP[0].ProcessName; //Process 
RAM_memorysize = PC.NextValue();   //float RAM_memorysize; 
PC.Close(); 
PC.Dispose();