我想找到一种方法来遍历所有活动进程并对它们进行诊断检查(内存使用情况、cpu 时间等),有点类似于任务管理器。
问题分为两部分:
- 查找所有进程
- 查找有关它们的诊断属性
我什至不确定要在哪个名称空间中查找它。任何帮助/提示/链接都将不胜感激。
我想找到一种方法来遍历所有活动进程并对它们进行诊断检查(内存使用情况、cpu 时间等),有点类似于任务管理器。
问题分为两部分:
我什至不确定要在哪个名称空间中查找它。任何帮助/提示/链接都将不胜感激。
查找所有进程
您可以通过 Process 类执行此操作
using System.Diagnostics;
...
var allProcesses = Process.GetProcesses();
运行诊断
你能在这里给我们更多的信息吗?目前还不清楚你想做什么。
Process 类提供了一些信息,尽管这可能会对您有所帮助。可以查询这个类
编辑
OP 提到他们想要获取内存和 CPU 信息。这些属性在 Process 类中很容易获得(由 GetProcesses() 返回)。下面是列出所有受支持属性的 MSDN 页面。有多种内存和 CPU 可供选择,以满足您的需求。
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
代码:
将此行添加到您的使用列表中:
using System.Diagnostics;
现在您可以使用 Process.GetProcesses() 方法获取进程列表,如下例所示:
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
查找所有进程实际上相当容易:
using System.Diagnostics;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
// Get whatever attribute for process.
}
JaredPar 已经指出了Process
该类,所以我将补充一点,您应该知道,该类会在创建实例时获取进程信息的快照。这不是实时取景。要更新它,您必须调用Refresh()
实例。
还要记住,当您检查它时,该进程可能会关闭,因此请准备好捕获异常并相应地处理它们。
最后,如果您致电Process.GetProcesses()
,您还将获得伪进程“空闲”和“系统”。IIRC 它们具有特定的进程 ID,因此您可以轻松地将它们过滤掉。
这是我更喜欢访问进程的方式:
static void Main(string[] args)
{
Process.GetProcesses().ToList().ForEach(p =>
{
Console.WriteLine(
p.ProcessName + " p.Threads.Count=" + p.Threads.Count + " Id=" + p.Id);
});
Console.ReadKey();
}
您使用什么操作系统?我从你的 C# 标签中得到它是 windows 吗?
如果是这样,请查看 WMI,尤其是 Win32_Process 类。这是 MSDN 参考: http: //msdn.microsoft.com/en-us/library/aa394372 (VS.85).aspx
以及这里的几个使用场景(例如获取进程列表):http: //msdn.microsoft.com/en-us/library/aa394599 (VS.85).aspx
那么你可以在powershell中做到这一点
1.查找所有进程
get-Process
2.查找有关它们的诊断属性
get-Process | where-object { $_.Handles -gt 200 }
上面的代码将返回超过 200 个句柄的所有进程,您可以通过这种方式轻松指定诊断属性。
using System.Diagnostics;
class Program
{
static void Main()
{
Process[] processlist = Process.GetProcesses();`
}
}
这里的进程数组包含所有存在于其中的进程数。