2012-02-02 18 views
24

Aynı uygulamanın birden çok örneğini izliyorum ve her iki işlemin de belleğini ve cpu kullanımını almam gerekiyor. Ancak, performans sayacını kullanmanın bir yolunu anlayamıyorum ve hangi sonucun hangi süreç için olduğunu bilmiyorum. Her biri için sonuç almak için # 1'i ve ismin sonuna kadar ekleyebileceğimi görmüştüm ama bu hangisinin hangi süreç için olduğunu söylemiyor.Performans Sayacı, İşlem Kimliği yerine ad?

Her bir işlemin sonucunu aynı ada sahip olmak için ProcessId değerini nasıl belirleyebilirim veya işlem kimliğini sayaca iletebilirim? İlgili bir soruya

PerformanceCounterCPU.CategoryName = "Process"; 
PerformanceCounterCPU.CounterName = "% Processor Time"; 
PerformanceCounterCPU.InstanceName = proc.ProcessHandle.ProcessName; 

PerformanceCounterMemory.CategoryName = "Process"; 
PerformanceCounterMemory.CounterName = "Working Set - Private"; 
PerformanceCounterMemory.InstanceName = proc.ProcessHandle.ProcessName; 
+1

Vay canına! Ben tam olarak ** ** aynı sorunu 2 yıl önce karşılaştım ve o zaman hiçbir cevap bulamadım ... Şimdi cevap için bekliyorum;) – ken2k

+0

Teşekkürler Ben. maalesef geçmişte soru sorduğum sorunlar nadiren ve çözülmemişti. Bu sorulardaki yöntemleri kullanmaktan vazgeçtim. – JeremyK

+0

Ken, Aşağıdaki cevap, – JeremyK

cevap

28

This answer işe yarayabilecek:

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 ..."); 
} 
+0

Mükemmel. Geçmişte ham değeri kullanmayı denedim, ancak hiçbir zaman pid ile eşleşmedi. Bu işe yaradı, çok teşekkür ederim. – JeremyK

+6

Kredi sağlamak uğruna, bu başlangıçta eski bir Ingo Rammer blogundan geliyor (makaleleri, eski .NET günlerimde bana çok şey öğretti): http://weblogs.thinktecture.com/ingo/2004/06/getting- Geçerli işlem-kendi-cpu-use.html – TheXenocide

+1

Bilinmesi güzel. Onu kopyaladığım kaynaktan kredilendim, bu benim için yeterli. –

İlgili konular