Как измерять общее потребление памяти текущего процесса программно в .NET?
Как измерять общее потребление памяти текущего процесса программно в .NET?
Ответ 1
Обратитесь к этому вопросу fooobar.com/questions/134800/...
Попробуйте это
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
Ответ 2
Если вы хотите только измерить увеличение, скажем, использования виртуальной памяти, вызванное некоторыми отдельными операциями, вы можете использовать следующий шаблон: -
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
, чтобы узнать, что доступно.
Ответ 3
Класс PerformanceCounter -
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
Есть несколько из них -
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
Вот счетчик памяти CLR -
Ответ 4
Я нашел это очень полезным:
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;