Как измерить общее потребление памяти текущего процесса программно в .NET?Как измерить общее потребление памяти текущего процесса программно в .NET?
ответ
Обратитесь к этому SO question
Далее попробуйте этот
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
PerformanceCounter класс -
http://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter.aspx
Есть несколько из них -
http://msdn.microsoft.com/en-us/library/w8f5kw2e.aspx
Вот памяти счетчика CLR -
Я нахожу это счетчики запутанным. Пример: «# Всего зарезервированных байтов»: «Отображает количество виртуальной памяти в байтах, в настоящее время зарезервированное сборщиком мусора». Тогда интересно? Это о памяти процесса или о памяти, которая будет собрана в ближайшее время? –
'new PerformanceCounter (« Процесс »,« Частные байты »,« ConsoleApplication1.vshost »). RawValue выглядит многообещающе –
Если вы хотите измерить рост, скажем, использование виртуальной памяти, вызванные некоторыми различными операциями, которые можно использовать следующую схему: -
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
, чтобы увидеть, что доступно.
Я нашел это очень полезно:
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;
Sigh ... Просто так, чтобы кто-нибудь, читающий это, не путался ... Вы только предоставили код для одного потока, поэтому вызовы MemoryBarrier оказались бесполезными (и нет многопоточной версии этого, любой смысл). Я не уверен, что вы думаете об этом, но это не то, что они на самом деле делают. –
- 1. Как измерить общее потребление памяти всех процессов пользователя в Python
- 2. Как оценить общее потребление памяти перм класса?
- 3. Как измерить потребление памяти сценария DXL?
- 4. уровень уровня памяти потребление процесса
- 5. Как получить потребление памяти процесса в Android
- 6. В Pharo, как вы можете измерить текущее общее потребление памяти системы?
- 7. Отладка текущего процесса .net
- 8. Потребление памяти памяти Java
- 9. Как правильно измерить использование памяти процесса в Linux?
- 10. Как измерить потребление энергии приложения в Android?
- 11. Использование памяти текущего процесса в C
- 12. Есть ли способ измерить потребление памяти изображения PNG?
- 13. Как измерить использование памяти приложения .net без выделения памяти?
- 14. получать общее потребление
- 15. Потребление памяти API
- 16. Как измерить потребление VRAM на Android?
- 17. Как уменьшить потребление памяти?
- 18. Получить выделенные области памяти текущего процесса
- 19. Как измерить использование памяти
- 20. Потребление памяти?
- 21. Как измерить общее время, проведенное в функции?
- 22. Потребление памяти wpfgfx_v0400.dll
- 23. .NET - Методы вызова внутри текущего процесса
- 24. Как измерить утечки памяти в .NET надежным и автоматическим способом?
- 25. Потребление процессора моего процесса
- 26. Загрузка процессора текущего процесса
- 27. Как настроить переменную среды программно для текущего процесса в Qt?
- 28. Использование памяти процесса PHP
- 29. Потребление памяти процесса Linux в байтах (не Kbytes)
- 30. Потребление памяти в Cherrypy
Соответственно этому блогу http://blogs.msdn.com/salvapatuel/archive/2007/10/13/ memory-working-set-explored.aspx Рабочий набор! = Общая память процесса –
Но в моих тестах значение WorkSet64 очень очень близко к показателю TaskManager –
@Jader Dias - этот ответ отражает суть требуемого (использование типа System.Diagnostics.Process), но будьте осторожны с тем, что сборщик мусора может или не может сделать иначе, вы можете в конечном итоге получить очень вводящие в заблуждение результаты - я покажу, как избежать этой проблемы в моем ответе –