使用process.WorkingSet64来测量内存使用情况的异常

时间:2013-05-06 15:28:19

标签: c# memory

我在SO上发现了很多关于使用这种方法来检索当前内存使用情况的引用,在我的例子中,是在64位Windows 7上运行的32位进程。我的代码是

System.Diagnostics.Process[] processes =
    System.Diagnostics.Process.GetProcessesByName("ProcessName");
if (processes.Count() != 1)
{
    throw exception here, only one instance allowed;
}

System.Diagnostics.Process process = processes[0];
memoryUsed = process.WorkingSet64 / (1024f * 1024f);

我的应用程序动态分配和释放堆内存,我可以使用标准的Windows任务管理器进行确认。但是,每次调用上面显示的代码时,使用的检索内存总是高于先前的计数。此外,它不同意TaskManager。根据任务管理器,它大约是249 MB,而编程检索的是280 MB。

我在做些傻事吗?

2 个答案:

答案 0 :(得分:3)

请参阅:

Process.WorkingSet64

  

说明:

     

此属性返回的值表示当前的大小   该过程使用的工作集内存。

Windows Task Manager Processes标签中显示的默认内存列为Memory (Private Working Set)

What do the Task Manager memory columns mean?

  

记忆 - 私人工作集

     

具体的工作集子集   描述了进程正在使用的内存量   由其他进程共享。

换句话说,如果您想要完整的工作集,可能需要使用Resource Monitor

perfmon.exe /res

答案 1 :(得分:1)

有多个与内存相关的进程计数器 - 工作集,私有工作集,共享工作集,提交大小,e.t.c。也许任务管理器使用WorkingSet64显示与您检索的内容不同的计数器。

尝试向所有与内存相关的列添加到任务管理器,以查看哪些内容与您的阅读距离更近。