當前,從進程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