C# Process.PrivateMemorySize64返回提交的内存而不是私有内存
我正在用C#编写一个使用.NET4.5的程序,该程序允许我监视特定进程的内存、CPU和网络使用情况,然后根据需要绘制数据图表 为了获得特定进程的内存使用情况,我正在检查C# Process.PrivateMemorySize64返回提交的内存而不是私有内存,c#,.net,C#,.net,我正在用C#编写一个使用.NET4.5的程序,该程序允许我监视特定进程的内存、CPU和网络使用情况,然后根据需要绘制数据图表 为了获得特定进程的内存使用情况,我正在检查进程对象的属性。我希望看到该进程使用的私有内存,但是它显示了提交中的内存量,正如Windows资源监视器所确认的那样 我的问题是: 1) 有人知道为什么会发生这种错误吗? 2) 有解决办法吗? 3) 如果没有修复,是否有另一种简单的方法可以获取为进程保留的私有内存 以下是我的代码的相关部分: using System; // I
进程
对象的属性。我希望看到该进程使用的私有内存,但是它显示了提交中的内存量,正如Windows资源监视器所确认的那样
我的问题是:
1) 有人知道为什么会发生这种错误吗?
2) 有解决办法吗?
3) 如果没有修复,是否有另一种简单的方法可以获取为进程保留的私有内存
以下是我的代码的相关部分:
using System;
// I add all the open Processes to an array
Process[] localAll = Process.GetProcesses();
// I then add all the processes to a combobox to select from
// There's a button that updates labels with requested info
Process[] p = Process.GetProcessesByName(comboBox1.SelectedItem.ToString());
label1.Text = p[0].PrivateMemorySize64.ToString() + " bytes";
从你的评论中,你说你正在寻找私人工作台。它出现在这个链接中 它确实不是Process类的一部分。您必须改用性能计数器 从另一个答案复制并粘贴,以防由于某种原因被删除
using System;
using System.Diagnostics;
class Program {
static void Main(string[] args) {
string prcName = Process.GetCurrentProcess().ProcessName;
var counter = new PerformanceCounter("Process", "Working Set - Private", prcName);
Console.WriteLine("{0}K", counter.RawValue / 1024);
Console.ReadLine();
}
}
再一次..当我们看不到您当前正在使用的代码时,很难判断出问题出在哪里。。通过阅读PrivateMemorySize64的文档,显示您的代码肯定会有所帮助,提交大小正是我希望它返回的大小。你说的“私人内存”到底是什么意思?你说的是私人工作台吗?是的,我指的是私人工作台。我为这种模糊性道歉。请注意,虽然
处理.PrivateMemorySize64
访问实际上是即时的,但创建性能计数器需要相当长的时间(秒),并且在需要高性能或实时报告的应用程序中可能无法接受。由于Process
和PerformanceCounter
是IDisposable
的后代,您还必须使用包装。