c# - 使用 process.WorkingSet64 测量内存使用情况出现异常

标签 c# memory

我在这里找到了很多关于使用此方法来检索当前内存使用情况的引用资料,就我而言,是在 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 任务管理器确认这一点。然而,每次我调用上面显示的代码时,检索到的使用的内存总是高于之前的计数。另外,它与任务管理器不一致。根据任务管理器的显示,该大小约为 249 MB,而以编程方式检索的大小为 280 MB。

我是不是做了什么蠢事?

最佳答案

参见:

Process.WorkingSet64

Remarks:

The value returned by this property represents the current size of working set memory used by the process.

Windows 任务管理器 进程 选项卡中显示的默认内存列是内存(私有(private)工作集)

What do the Task Manager memory columns mean?

Memory - Private Working Set

Subset of working set that specifically describes the amount of memory a process is using that cannot be shared by other processes.

换句话说,如果您想要完整的工作集,您可能需要使用资源监视器

perfmon.exe/res

关于c# - 使用 process.WorkingSet64 测量内存使用情况出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402036/

相关文章:

c# - 在 Quartz.net 中删除作业的触发器

c++ - 使用 DELETE 来节省内存,有人可以证明

javascript - 释放 ThreeJS 应用程序的内存

java - Parent 变量如何存储大于 Parent 的 Child?

memory - 如何在内存有限的嵌入式系统上使用AT读取短信?

java - 有什么方法可以替代使用 DOM XML 解析器对大型 XML 文档进行多个查找操作?

c# - Visual C# Windows 窗体应用程序中的字符频率

c# - 使用 MongoDB 的官方 C# 驱动程序时重新保存的预期更新行为

c# - 通过忽略自己的用户域的报告用户运行所有 SSRS 报告

c# - 为什么没有关于身份分配的警告?