Bu makalemizde C# programlama dilinde Bilgisayarın Kullandığı CPU Miktarının Yüzdesel Ölçümünün nasıl yapıldığını anlatmaya çalışacağım.
Buna nerede ihtiyacımız olacak diye düşünmeyin. Çünkü özellikle Windows sunucularla çalıştığınızda çok işinize yarayacağını söyleyebilirim... Örneğin bir Ddos atağının ilk belirtisi CPU yükselmesi sonra da RAM yükselmesi, veri yollarının kitlenmesi ... dir
Konuyu fazla uzatmadan biraz açıklama yaparak kodları vermeye çalışacağım.
C# programlama dilinde bilgisayarlara ilgili analizleri yapabilmek için System.Diagnostics isim uzayı yer alır. Biz de CPU kullanımını ölçebilmek için System.Diagnostics isim uzayının altında yer alan PerformanceCounter sınıfını kullanacağız. Kullanılan CPU miktarını ölçmek için PerformanceCounter sınıfını tanımlarken bir kaç parametrenin verilmesi gerekiyor. Daha doğrusu birkaç parametrenin değeri string olarak girilmesi gerekiyor.
Kullanılan CPU miktarının ölçülebilmesi için PerformanceCounter sınıfının tanımlanması ve parametrelerin belirtilmesi aşağıdaki gibi olmalıdır.
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
Not: PerformanceCounter sınıfında Constructor olarak bu parametreleri girecek yapı da mevcuttur. Yani değerleri direk PerformanceCounter sınıfını tanımlarken de girebiliriz.
PerformanceCounter sınıfını tanımladıktan sonra yapmamız gereken işlem ise PerformanceCounter sınıfı içinde yer alan NextValue metodunu kullanmaktır.
Bu metot bize CPU kullanım oranını verecektir.
Burada dikkat edilmesi gereken bir nokta var ki NextValue metodunun ilk değeri her zaman sıfırdır. Bu yüzden belirli bir süre örneğin 1 saniye kadar bekleyip tekrar NextValue metodunu kullanırsak doğru değeri elde edebiliriz. Birazdan örnek uygulamada da göreceğiniz gibi kullanımı tercih edebilirsiniz...
dynamic firstValue = cpuCounter.NextValue();//Bu değer her zaman sıfırdır.
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue();
Görüldüğü gibi C# programlama dilinde bilgisayarın kullandığı CPU değerini ölçmek bu kadar basittir. Ama bundan sonra dikkat etmeniz gereken bir kaç nokta vardır. Bunlardan birincisi anlık olarak elde ettiğiniz CPU kullanım değerinin sizin için doğru bir değer olmayabilir. Bu yüzden bir kaç defa ölçüm yapıp bu değerlerin ortalamasını almak sizi daha doğru sonuca götürecektir. Nitekim son olarak verdiğim kodlarda ben de böyle yapmaya çalıştım.
Bir diğer önemli nokta ise bu ölçüm değerinin tüm bilgisayar için değil bilgisayarın çalıştığı çekirdek ve işlemci için geçerli olmasıdır. Yani en doğru hesaplama için bilgisayarın çekirdek ve işlemci sayıları kadar thread oluşturup bunların hepsinde ölçüm yapıp ortalamasını almak gerekiyor. Ama tabii ki bu kodlardan da elde ettiğiniz bir değer size genel olarak bilgisayarın CPU kullanımı konusunda bir fikir verecektir...
Makalenin sonlarında kodları bir arada metot halini sizinle paylaşmak istiyorum...
**************************************************
public object CPUKullanimYuzdesiHesapla()
{
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
dynamic firstValue = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue1 = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue2 = cpuCounter.NextValue();
return (secondValue + secondValue1 + secondValue2) / 3;
}
***************************************************
Son olarak konuyu özetleyecek olursak, bu makalemizde C# programlama dilin bilgisayarın kullandığı CPU miktarının yüzdesel olarak nasıl hesaplanacağını gördük. Bunun için System.Diagnostics isim uzayının altında yer alan PerformanceCounter sınıfını kullandık. PerformanceCounter sınıfı içinde CPU kullanım ölçümü için gerekli parametre ve değerlerini belirttik. Bunun dışında hassas uygulamalar için sonuçları iyileştirmek için bir kaç yöntem de önerilmiştir...
Umarım makalem faydalı olmuştur. Sorularınız olursa bana yazabilirsiniz...
Buna nerede ihtiyacımız olacak diye düşünmeyin. Çünkü özellikle Windows sunucularla çalıştığınızda çok işinize yarayacağını söyleyebilirim... Örneğin bir Ddos atağının ilk belirtisi CPU yükselmesi sonra da RAM yükselmesi, veri yollarının kitlenmesi ... dir
Konuyu fazla uzatmadan biraz açıklama yaparak kodları vermeye çalışacağım.
C# programlama dilinde bilgisayarlara ilgili analizleri yapabilmek için System.Diagnostics isim uzayı yer alır. Biz de CPU kullanımını ölçebilmek için System.Diagnostics isim uzayının altında yer alan PerformanceCounter sınıfını kullanacağız. Kullanılan CPU miktarını ölçmek için PerformanceCounter sınıfını tanımlarken bir kaç parametrenin verilmesi gerekiyor. Daha doğrusu birkaç parametrenin değeri string olarak girilmesi gerekiyor.
Kullanılan CPU miktarının ölçülebilmesi için PerformanceCounter sınıfının tanımlanması ve parametrelerin belirtilmesi aşağıdaki gibi olmalıdır.
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
Not: PerformanceCounter sınıfında Constructor olarak bu parametreleri girecek yapı da mevcuttur. Yani değerleri direk PerformanceCounter sınıfını tanımlarken de girebiliriz.
PerformanceCounter sınıfını tanımladıktan sonra yapmamız gereken işlem ise PerformanceCounter sınıfı içinde yer alan NextValue metodunu kullanmaktır.
Bu metot bize CPU kullanım oranını verecektir.
Burada dikkat edilmesi gereken bir nokta var ki NextValue metodunun ilk değeri her zaman sıfırdır. Bu yüzden belirli bir süre örneğin 1 saniye kadar bekleyip tekrar NextValue metodunu kullanırsak doğru değeri elde edebiliriz. Birazdan örnek uygulamada da göreceğiniz gibi kullanımı tercih edebilirsiniz...
dynamic firstValue = cpuCounter.NextValue();//Bu değer her zaman sıfırdır.
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue();
Görüldüğü gibi C# programlama dilinde bilgisayarın kullandığı CPU değerini ölçmek bu kadar basittir. Ama bundan sonra dikkat etmeniz gereken bir kaç nokta vardır. Bunlardan birincisi anlık olarak elde ettiğiniz CPU kullanım değerinin sizin için doğru bir değer olmayabilir. Bu yüzden bir kaç defa ölçüm yapıp bu değerlerin ortalamasını almak sizi daha doğru sonuca götürecektir. Nitekim son olarak verdiğim kodlarda ben de böyle yapmaya çalıştım.
Bir diğer önemli nokta ise bu ölçüm değerinin tüm bilgisayar için değil bilgisayarın çalıştığı çekirdek ve işlemci için geçerli olmasıdır. Yani en doğru hesaplama için bilgisayarın çekirdek ve işlemci sayıları kadar thread oluşturup bunların hepsinde ölçüm yapıp ortalamasını almak gerekiyor. Ama tabii ki bu kodlardan da elde ettiğiniz bir değer size genel olarak bilgisayarın CPU kullanımı konusunda bir fikir verecektir...
Makalenin sonlarında kodları bir arada metot halini sizinle paylaşmak istiyorum...
**************************************************
public object CPUKullanimYuzdesiHesapla()
{
PerformanceCounter cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
dynamic firstValue = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue1 = cpuCounter.NextValue();
System.Threading.Thread.Sleep(1000);
dynamic secondValue2 = cpuCounter.NextValue();
return (secondValue + secondValue1 + secondValue2) / 3;
}
***************************************************
Son olarak konuyu özetleyecek olursak, bu makalemizde C# programlama dilin bilgisayarın kullandığı CPU miktarının yüzdesel olarak nasıl hesaplanacağını gördük. Bunun için System.Diagnostics isim uzayının altında yer alan PerformanceCounter sınıfını kullandık. PerformanceCounter sınıfı içinde CPU kullanım ölçümü için gerekli parametre ve değerlerini belirttik. Bunun dışında hassas uygulamalar için sonuçları iyileştirmek için bir kaç yöntem de önerilmiştir...
Umarım makalem faydalı olmuştur. Sorularınız olursa bana yazabilirsiniz...
Güzel bir anlatım olmuş. Bir test uygulaması yazarken kullandım. Teşekkürler...
YanıtlaSil