Как измерить потребление общей памяти текущего процесса программно в.NET?
Обратитесь к этому SO вопрос
Далее попробуйте это
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
Если вы хотите измерить только увеличение использования виртуальной памяти, вызванное некоторыми отдельными операциями, вы можете использовать следующий шаблон: -
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
var before = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
// performs operations here
var after = System.Diagnostics.Process.GetCurrentProcess().VirtualMemorySize64;
Это, конечно, при условии, что ваше приложение не выполняет операции с другими потоков во время выполнения вышеуказанных операций.
Вы можете заменить VirtualMemorySize64
любой другой метрикой, которая вас интересует. Посмотрите на тип System.Diagnostics.Process
, чтобы узнать, что доступно.
Класс PerformanceCounter -
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
Их несколько -
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
Вот счетчик памяти CLR -
Я нашел это очень полезным:
Thread.MemoryBarrier();
var initialMemory = System.GC.GetTotalMemory(true);
// body
var somethingThatConsumesMemory = Enumerable.Range(0, 100000)
.ToArray();
// end
Thread.MemoryBarrier();
var finalMemory = System.GC.GetTotalMemory(true);
var consumption = finalMemory - initialMemory;