有人知道如何确定堆内进程的RAM使用情况吗?具体来说,.NET对象使用了多少实际内存,与.NET堆大小相反?
答案 0 :(得分:2)
那是不可能的。在任何时候,可以交换虚拟存储器地址空间的不同部分。操作系统使用最近使用的算法来确定哪些页面应该保留在RAM中以确保该过程最不可能减慢速度。这些选择是高度动态的,需要尽可能快地运行,以最大限度地减少获得需要RAM再次运行的其他进程的延迟。即使您可以看到映射,它也只是一个快照,很快变得无关紧要。
您唯一的指示是您自己的进程的Environment.WorkingSet属性,另一个进程的Process.WorkingSet64。但这只是整个过程的一个粗略数字,无法从那里分解。否则没有winapi功能,也不能轻易发现GC堆段的VM地址。 SysInternals的实用程序对于这种低级别的黑客攻击通常很方便。但是,VMMap不显示RAM使用情况,RAMMap不再适用于我的Win 8.1机器,因此我无法告诉您有多少可以看到。