Как я вычисляю частный рабочий набор памяти с помощью C#? Я интересуюсь созданием примерно тех же чисел как taskmgr.exe
.
Я использую Process
пространство имен и методы/данные использования как WorkingSet64
и PrivateMemorySize64
, но эти числа выключены на 100 МБ или больше время от времени.
Это число сильно варьируется, вы не можете его вычислить. Диспетчер памяти Windows постоянно меняет местами страницы в ОЗУ и из нее. TaskMgr.exe получает его от счетчика производительности. Вы можете получить такое же число следующим образом:
using System;
using System.Diagnostics;
class Program {
static void Main(string[] args) {
string prcName = Process.GetCurrentProcess().ProcessName;
var counter = new PerformanceCounter("Process", "Working Set - Private", prcName);
Console.WriteLine("{0}K", counter.RawValue / 1024);
Console.ReadLine();
}
}
Имейте в виду, что число на самом деле не имеет большого значения, оно упадет, когда другие процессы начнутся и будут конкурировать за оперативную память.
Может быть, GC.GetTotalMemory
предоставит вам необходимые данные?