1

有人知道如何确定堆内进程的 RAM 使用情况吗?具体来说,与 .NET 堆大小相反,.NET 对象使用了多少实际内存?

4

1 回答 1

2

那是不可能的。在任何时候,虚拟内存地址空间的不同部分都可能被换出。操作系统使用最近使用的算法来确定哪些页面应该留在 RAM 中,以确保进程最不可能减慢速度。这些选择是高度动态的,需要尽可能快地运行,以最大程度地减少需要 RAM 再次运行的其他进程的延迟。即使你能看到映射,它也只是一个快照,很快就会变得无关紧要。

您拥有的唯一指示是您自己的进程的 Environment.WorkingSet 属性,另一个进程的 Process.WorkingSet64。但这只是整个过程的粗略数字,无法从那里分解。否则,没有 winapi 功能,您也无法轻松发现 GC 堆段的 VM 地址。SysInternals 的实用程序对于这种低级黑客攻击通常很方便。但是,VMMap 不显示 RAM 使用情况,并且 RAMMap 不再在我的 Win 8.1 机器上工作,所以我不能告诉你你能看到多少。

于 2013-10-21T10:52:14.543 回答