我正在尝试获取我的应用程序的内存使用情况,但是出于某些原因,我得到的大小与任务管理器中显示的不同。
我正在使用:
任务管理器显示我的应用占用45MB,而当我在代码中获取它时,我得到了85MB。如何获得与任务管理器相同的大小(不使用WMI)。
对我来说以上方法都无效。因此,我找到了Hans Passant提供的解决方案。
这个解决方案非常好。
string prcName = Process.GetCurrentProcess().ProcessName;
var counter_Exec = new PerformanceCounter("Process", "Working Set - Private", prcName);
double dWsp_Exec = (double)counter_Exec.RawValue / 1024.0; <---that is the value in KB
此外,我有时会发现一个小的不同(<10%),这可能与更新有关。
唯一的小缺点是第一条指令需要很长时间(5秒)来累积数据,因此可以在线程中处理。
WorkingSet64
而不是PrivateMemorySize64
。 PrivateMemorySize64
是为进程分配的虚拟内存量,而不是物理内存。对于物理内存,请使用WorkingSet64
。process.Refresh()
,因为它被严重缓存。process.Refresh();
_data.MemoryUsed = (process.WorkingSet64).ConvertBytesToMegabytes().ToString(CultureInfo.InvariantCulture);
Sleep(200)
更改为Sleep(1000)
,以便与任务管理器同步。 - Sriram SakthivelPerformanceCounter 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();
process.PrivateMemorySize64
之前添加process.Refresh()
。 - Sriram Sakthivel