2010-05-30 16 views
5

Çekirdek başına CPU Çekirdeğini nasıl alabilirim (quadcore işlemci), C#?C# başına çekirdek başına CPU yükünü nasıl alabilirim?

Teşekkür :) çekirdek yana

+0

olası yinelenen: // stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c) – chakrit

+1

Bunu gördük ama Bu küresel yük, PER çekirdeğe ihtiyacım var. – JustFogMaxi

+0

Ben onu buldum: http://www.codegain.com/articles/csharp/windowsforms/how-to-display-processor-usage-of-dual-core-processors.aspx – JustFogMaxi

cevap

7

WMI veya System.Diagnostics ad alanını kullanabilirsiniz. Buradan istediğiniz performans sayaçlarını yakalayabilirsiniz (ancak bunu başlatmak için bir saniye (1-1.5s) gerekir - okuma değerleri tamam, sadece başlatma yavaştır)

Kod şu şekilde görünebilir:

using System.Diagnostics; 

    public static Double Calculate(CounterSample oldSample, CounterSample newSample) 
    { 
     double difference = newSample.RawValue - oldSample.RawValue; 
     double timeInterval = newSample.TimeStamp100nSec - oldSample.TimeStamp100nSec; 
     if (timeInterval != 0) return 100*(1 - (difference/timeInterval)); 
     return 0; 
    } 

    static void Main() 
    { 
     var pc = new PerformanceCounter("Processor Information", "% Processor Time"); 
     var cat = new PerformanceCounterCategory("Processor Information"); 
     var instances = cat.GetInstanceNames(); 
     var cs = new Dictionary<string, CounterSample>(); 

     foreach (var s in instances) 
     { 
      pc.InstanceName = s; 
      cs.Add(s, pc.NextSample()); 
     } 

     while (true) 
     { 
      foreach (var s in instances) 
      { 
       pc.InstanceName = s; 
       Console.WriteLine("{0} - {1:f}", s, Calculate(cs[s], pc.NextSample())); 
       cs[s] = pc.NextSample(); 
      } 
      System.Threading.Thread.Sleep(500); 
     } 
    } 

Önemli şey 100nsInverse performans sayaçları (sadece 0 veya 100 Benim için getiri ... hata?) için doğal .net hesaplama güvenmek cant ama kendiniz hesaplamak zorunda ve bunun için bir arşiv gerek Her örnek için son CounterSamples (örneklerin bir çekirdek veya bu çekirdeklerin toplamını temsil eder).

bir adlandırma bu örnekleri için Convetion olduğu görülmektedir: - ilk işlemci birinci göbek 0,1 - birinci işlemci ikinci göbek 0, _Total - ilk işlemci _Total toplam yük -

0,0 toplam tüm işlemciler yük

(doğrulanmadı - o e kadar daha fazla araştırma yapılır güvenmek tavsiye etmem) ... [C# CPU Kullanımı almak nasıl?] (http

0

OS olarak ayrı CPU göstermek, size bir çok işlemcili makinede CPU başına yükünü belirlemek için kullandığımız aynı kodu kullanırlar. Böyle bir örnek (C), here'dur. WMI kullandığını unutmayın, bu nedenle yukarıdaki yorumlarda bağlantılı olan diğer konu muhtemelen size en fazla yol gösterir.

İlgili konular