当前,从进程ID获取实例名称的解决方案来自以下代码。 问题是,这需要大量的时间和CPU资源!从进程ID /对象获取进程实例名称(更快的方法)
也就是说,当您有一个运行至少100个进程的系统时,需要相当长的时间循环才能找到它。 (如1到2秒)当我期望找到多达30个这些进程时,最多需要30秒才能找到它们...
难道你不能简单地从进程中获取实例名称目的?
private static string GetProcessInstanceName(int pid)
{
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
string[] instances = cat.GetInstanceNames();
foreach (string instance in instances)
{
using (PerformanceCounter cnt = new PerformanceCounter("Process",
"ID Process", instance, true))
{
int val = (int) cnt.RawValue;
if (val == pid)
{
return instance;
}
}
}
throw new Exception("Could not find performance counter " +
"instance name for current process. This is truly strange ...");
}
这样做的问题是,如果存在多个相同nname的实例,例如:java#1 java#2,它不会返回正确的进程号..只是java。 – ultramoo
@ user3289302你不能比'进程ID'更具体。如果你有它,它肯定会返回1(并且唯一)与该PID的过程。 –
PerformanceCounter方法需要一个实例名称,而不是一个PID ...就像这里:new PerformanceCounter(“Process”,“%Processor Time”,instanceName);如果只有一个同名的实例在运行,但是当你有两个相同的实例名时,你的方法不会像performanceCounter期待的那样返回它。例如java#1 java# 2你会以其他方式知道吗?或者有没有办法用pid提供PerformanceCounter? – ultramoo