我在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。
我在做些傻事吗?
答案 0 :(得分:3)
请参阅:
说明:
此属性返回的值表示当前的大小 该过程使用的工作集内存。
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
显示与您检索的内容不同的计数器。
尝试向所有与内存相关的列添加到任务管理器,以查看哪些内容与您的阅读距离更近。