2

我在这里找到了很多关于使用这种方法来检索当前内存使用情况的参考资料,在我的例子中,是在 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。

我在做傻事吗?

4

2 回答 2

3

看:

Process.WorkingSet64

评论:

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

选项卡中显示的默认内存列Windows Task Manager ProcessesMemory (Private Working Set)

任务管理器内存列是什么意思?

内存 - 私有工作集

工作集的子集,专门描述一个进程正在使用的内存量,而这些内存量不能被其他进程共享。

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

perfmon.exe /res

于 2013-05-06T15:38:42.023 回答
1

有多个与内存工作集、私有工作集、共享工作集、提交大小等相关的进程计数器也许任务管理器显示的计数器与您正在使用的检索不同WorkingSet64

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

于 2013-05-06T15:35:12.523 回答