Process.WorkingSet64 就是内存占用大小
// // 摘要: // 获取关联进程的物理内存使用情况。 // // 返回结果: // 关联进程当前使用的物理内存总量(以字节为单位)。 // // 异常: // System.PlatformNotSupportedException: // 此平台为 Windows 98 或 Windows Millennium Edition (Windows Me),它不支持此属性。 [Obsolete("This property has been deprecated. Please use System.Diagnostics.Process.WorkingSet64 instead. http://go.microsoft.com/fwlink/?linkid=14202")] [MonitoringDescription("ProcessWorkingSet")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int WorkingSet { get; } // // 摘要: // 获取为关联的进程分配的物理内存量。 // // 返回结果: // 为关联的进程分配的物理内存量(以字节为单位)。 // // 异常: // System.PlatformNotSupportedException: // 此平台为 Windows 98 或 Windows Millennium Edition (Windows Me),它不支持此属性。 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] [MonitoringDescription("ProcessWorkingSet")] [ComVisible(false)] public long WorkingSet64 { get; }
这个和任务管理器里面的数值是不一样的,我是想获取任务管理器里面的那个内存值,也就是资源管理器里面对应的“专用”那一列
@秦随境迁: 那就用PerformanceCounter
@秦随境迁: 这个内存是有很多 什么工作集 高峰工作集 等等, 你说的"专用"实际上是私有工作集
var ps = Process.GetCurrentProcess(); PerformanceCounter pf1 = new PerformanceCounter("Process", "Working Set - Private", ps.ProcessName); //第二个参数就是得到只有工作集 Console.WriteLine("{0}:{1} {2:N}KB", ps.ProcessName, "私有工作集 ", pf1.NextValue()/1024); //这个就是私有工作集占用物理内存大小
@jio92:
这里有篇详细介绍的文章:http://www.cnblogs.com/maowang1991/archive/2013/08/27/3285983.html
@jio92: 这个我也考虑过了,不过用PerformanceCounter的话会导致程序的CPU占用过高
@秦随境迁: 肯定啊 这个涉及到性能计数器 他要计算 占用肯定会高, 要不你就用API来获取
@秦随境迁: 这个内存占用它肯定不是一个定值,所以你不可能通过一个属性来得到这个值,就算有也不准确,还是要通过计算来得到当前准确值
如果有放弃process类的想法,可以考虑下通过window api获取,参考ProcessHacker项目
谢谢分享,暂时只考虑用Process类,我看了下那个项目,他获取的内存值和上面那位说的是一样的,我暂时也用那个吧
1、取当前进程占用内存
var workingSet = Environment.WorkingSet / (1024 * 1024);通过这行代码很容易拿到当前进程占用内存,单位是MB
2、取非当前进程占用内存
var workingSet = Process.WorkingSet64 / (1024 * 1024); 单位是MB