2016-04-11 44 views
-1

CPU itilizasyonunun hesaplanmasında farklı bir davranışla karşılaştım. Kodumda "İşlemci Zamanı", "_Total" ve performans sayacını kullanıyorum, iyi çalışıyor gibi görünüyor (Windows Performans monitörü aynı değeri gösteriyor, Sysinternals Process Explorer da) , ancak Windows'ta Görev Yöneticisi Güç seçenekleri, CPU hızına ve CPU'nun daha düşük bir frekansta belirli bir anda olmasına izin veriyorsa, 8 veya 10 daha az gösterir.CPU kullanımı ve CPU hızı

C# C işlevi var mı, mükemmel. Sayaç .. bu (Görev Yöneticisi) değerini sağlamak için, veya mevcut CPU frekansını okuyun ve bir şekilde hesaplayın? Birisi bu gereksinimi karşıya gelecek olursa

+0

_Total kullanma ve böylece yerine sadece senin içinde * Bütün * süreçleri için kullanılan işlemci zamanını almak oldukça sıradışı olup ne onun İşlemler sekmesine Görev Yöneticisi görüntüler . Kategori önemli, "İşlemci" ve "İşlemci Bilgileri" var. Görev Yöneticisi ikincisini kullanır, değişken saat oranları ve hiper iş parçacığı için telafi etmeye çalışan daha yeni bir sayaç kategorisidir. En iyi yol, programınıza hiçbir yardım almadan kolayca görülebilen bir doodah eklememektir. –

+0

teşekkürler, ancak "İşlemci" ve "İşlemci Bilgileri" kategorisi bana aynı sayıları veriyor, hatta CPU yaklaşık yarım frekansta çalışıyor. – user2136076

cevap

0

, ben nihayet çözüldü nasıl göstermek istiyorum:

Anlaşılan Windows 8 "% İşlemci Programı" adlı bir performans izleme sayacı içerir. Ve bu, Win 8 Görev Yöneticisi'nde gösterilen ve CPU Kullanımı olarak 10 kazanır. Bu sayaç, genellikle CPU kullanımını görüntülemek için kullanılan "% İşlemci Süresi" nin aksine, dengeli CPU hızını dikkate alır.

% İşlemci Programı onun itibari performansı ve asla rölantide çalışıyormuş işlemci tamamlayamadı iş miktarının yüzdesi olarak, bir işlemci tamamladığı çalışmalar miktarıdır. Bazı işlemcilerde, İşlemci Yardımcı Programı% 100'ü geçebilir. C# kod snippet'inde

:

PerformanceCounter _cpuCounter = new PerformanceCounter("Processor Information", "% Processor Utility", "_Total"); 
CounterSample firstValue = _cpuCounter.NextSample(); 
Thread.Sleep(500); 
CounterSample secondValue = _cpuCounter.NextSample(); 
    string cpuUsage = CounterSample.Calculate(firstValue, secondValue).ToString("0.0"); 
İlgili konular