我想找到一种循环遍历所有活动进程的方法,并对它们进行诊断检查(内存使用情况,CPU时间等),类似于任务管理器。
问题分为两部分:
我甚至不确定要在哪个命名空间中查看它。任何帮助/提示/链接都很感激。
答案 0 :(得分:68)
查找所有流程
您可以通过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);
}
答案 1 :(得分:6)
实际上找到所有流程非常简单:
using System.Diagnostics;
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
// Get whatever attribute for process.
}
答案 2 :(得分:4)
JaredPar已经指出了Process
类,所以我只想补充一点,你应该知道,该类在创建实例时会获取进程信息的快照。这不是实时视图。要更新它,您必须在实例上调用Refresh()
。
另外请记住,在检查过程中,进程可能会关闭,因此请准备好捕获异常并相应地处理它们。
最后,如果你打电话给Process.GetProcesses()
,你也会得到伪进程“空闲”和“系统”。 IIRC他们有特定的进程ID,因此您可以轻松过滤掉它们。
答案 3 :(得分:0)
您使用的是哪种操作系统?我从你的C#标签中取出它的窗口吗?
如果是这样,请查看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
答案 4 :(得分:0)
你可以在powershell中做到这一点
1.找出所有过程
get-Process
2.找到关于它们的诊断属性
get-Process | where-object { $_.Handles -gt 200 }
上面的代码将返回包含200多个句柄的所有进程,您可以轻松地以这种方式指定诊断属性。
的更多信息答案 5 :(得分:0)
using System.Diagnostics;
class Program
{
static void Main()
{
Process[] processlist = Process.GetProcesses();`
}
}
此处理arrray包含存在于其中的所有进程数。
答案 6 :(得分:0)
这是我更喜欢访问流程的方式:
name