首页新闻找找看学习计划

c# 获取某进程占用的内存

0
悬赏园豆:10 [已解决问题] 解决于 2013-11-22 14:38

Process[] processes = Process.GetProcesses();
            long totalMemery = 0;
            StringBuilder sbResult = new StringBuilder();
            foreach (Process process in processes)
            {
                sbResult.AppendFormat("名称:{0} 内存大小:{1}KB \n", process.ProcessName, process.PrivateMemorySize64 / 1024);
                totalMemery += process.PrivateMemorySize64 / 1024;
            }
            string result = string.Format("进程总数 {0} 个,共占内存:{1}MB \n", processes.Length, totalMemery / 1024)
                + sbResult.ToString();
            MessageBox.Show(result);

===================

使用这个方法,获取到内存与[任务管理器]里面获取到的内存,不一致,怎么获取到和[任务管理器]里一致的数据??

simadi的主页 simadi | 菜鸟二级 | 园豆:283
提问于:2013-08-30 14:14
< >
分享
最佳答案
0

Process 类关于 MemorySize 的属性有好几个,你只是取了 PrivateMemorySize64 属性而已。

你仔细看下“任务管理器”,里面关于进程内存的列也有好几个。

收获园豆:5
Launcher | 高人七级 |园豆:45040 | 2013-08-30 16:33
其他回答(1)
0

拿到pid  从tasklist 找。

收获园豆:5
````` | 园豆:14268 (专家六级) | 2013-08-30 14:31

上代码,呵呵,谢谢

支持(0) 反对(0) simadi | 园豆:283 (菜鸟二级) | 2013-08-30 14:31

@simadi: 

    
            var  _generate = new ProcessStartInfo();
            _generate.WorkingDirectory = _folor;
            _generate.UseShellExecute = false;
            _generate.RedirectStandardInput = true;
            _generate.RedirectStandardError = true;
            _generate.RedirectStandardOutput = true;
            _generate.CreateNoWindow = true;
            _generate.FileName = "tasklist";
_generate.Arguments = string.Format("/FI \"PID eq {0}\"",pid);

 var code = string.Empty;

            using (var s = Process.Start(_generate))
            {
                while (s.StandardOutput.Peek() > -1)
                {
                    code += s.StandardOutput.ReadToEnd();
                }
                s.Disposed += (m, c) => { };
            }

内存在code里,自己提取下就行了。

支持(0) 反对(0) ````` | 园豆:14268 (专家六级) | 2013-08-30 14:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册