2010-05-30 23 views
5

Làm cách nào tôi có thể tải CPU trên mỗi lõi (CPU lõi tứ), trong C#?Làm cách nào để tải CPU trên mỗi lõi trong C#?

Cảm ơn :)

+0

thể trùng lặp của [làm thế nào để có được sử dụng CPU trong C#?] (http: // stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c) – chakrit

+1

Thấy điều đó, nhưng thats tải toàn cầu, tôi cần PER lõi. – JustFogMaxi

+0

Tôi đã tìm thấy nó: http://www.codegain.com/articles/csharp/windowsforms/how-to-display-processor-usage-of-dual-core-processors.aspx – JustFogMaxi

Trả lời

7

Bạn có thể sử dụng WMI hoặc không gian tên System.Diagnostics. Từ đó bạn có thể lấy bất kỳ quầy hiệu suất nào bạn muốn (tuy nhiên phải mất một giây (1-1.5s) để khởi tạo chúng - giá trị đọc là ok, chỉ khởi tạo chậm)

Mã có thể trông giống như sau:

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); 
     } 
    } 

Điều quan trọng là bạn không thể dựa vào tính toán .net thuần túy cho 100nsBộ đếm hiệu suất ngược (chỉ trả về 0 hoặc 100 cho tôi ... lỗi?) Nhưng bạn phải tự mình tính toán và bạn cần lưu trữ của CounterSamples cuối cùng cho mỗi cá thể (các cá thể đại diện cho một lõi hoặc một tổng của các lõi đó).

Có dường như là một convetion đặt tên cho những trường hợp:

0,0 - CPU đầu tiên đầu tiên lõi 0,1 - CPU đầu tiên cốt lõi thứ hai 0, _Total - tổng trọng tải CPU đầu tiên _Total - Tổng tải của tất cả các cpu

(không xác nhận - sẽ không khuyên bạn nên dựa vào nó tiếp tục điều tra cho đến khi được thực hiện) ...

0

Kể từ lõi hiện lên CPU như riêng biệt cho hệ điều hành, bạn sử dụng cùng mã bạn muốn sử dụng để xác định tải trọng mỗi CPU trong một cỗ máy đa. Một ví dụ như vậy (trong C) là here. Lưu ý rằng nó sử dụng WMI, do đó, các thread khác được liên kết trong các ý kiến ​​ở trên có thể có bạn hầu hết các cách đó.

Các vấn đề liên quan