Merhaba, bu yazıda sizlere PerformanceCounter kullanarak, öğrenebileceğimiz tüm sistem bilgilerini gösteren bir program yazacağız. Eğer PerformanceCounter hakkında hiçbir bilginiz yoksa bu linke tıklayarak, daha önce hazırladığım konuya ulaşabilirsiniz.
Dilerseniz projemize başlayalım. Projemizi oluşturalım ve formumuza 3 adet ListBox (lbxCategory, lbxInstance, lbxCounter), 1 adet Label (lblDeger) ve 1 adet de Timer (timer1) ekleyelim. Formumuzu alttaki resimde göründüğü gibi düzenleyelim.
Düzenledikten sonra kodları yazmaya başlayalım.
using System;
using System.Windows.Forms;
using System.Diagnostics;
namespace PerformanceCounterExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
PerformanceCounter pfc = new PerformanceCounter(); //PerformanceCounter sınıfından nesne oluşturdum
private void Form1_Load(object sender, EventArgs e)
{
var kategori = PerformanceCounterCategory.GetCategories(); //Tüm kategorileri çektim
foreach (var item in kategori)
{
lbxCategory.Items.Add(item.CategoryName); //Listbox'a kategorileri yazdırdım
}
lbxCategory.Sorted = true; //Aradığımızı kolay bulak bilebilmek için,
lbxInstance.Sorted = true; //listboxların otomatik sıralanmasını aktif ettim
lbxCounter.Sorted = true;
}
//1. Listboxın olaylarından (eventlarından) seçilen satırın değişmesi olayınını ekledim
private void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
lbxInstance.Items.Clear(); //Eğer kategori değiştirilse, eski instancename ve counternameler temzilensin
lbxCounter.Items.Clear();
timer1.Enabled = false; //Instancename ve counternameler seçilmediğin timer'ım durdurulsun
lblDeger.Text = "..."; //3.listboxtan countername seçilene kadar labelde değer gözükmesin
// ilk listboxtan seçilen kategorinin instancenamelerini çektim
var instance = new PerformanceCounterCategory(lbxCategory.SelectedItem.ToString());
foreach (var item in instance.GetInstanceNames())
{
lbxInstance.Items.Add(item); //çektiğim instancenameleri ortadaki listboxa yazdırdım
}
}
//2. Listboxın olaylarından (eventlarından) seçilen satırın değişmesi olayınını ekledim
private void ListBox2_SelectedIndexChanged(object sender, EventArgs e)
{
lbxCounter.Items.Clear();
timer1.Enabled = false;
lblDeger.Text = "..."; //3.listboxtan countername seçilene kadar yine aynı şekilde değer gözükmesin
//ilk listboxtan seçilen kategorinin tekrar instancenamelerini çektim
var kategori = new PerformanceCounterCategory(lbxCategory.SelectedItem.ToString());
//orta listboxta seçtiğim instancename'e göre countername'leri de çektim
var instance = kategori.GetCounters(lbxInstance.SelectedItem.ToString());
foreach (var item in instance)
{
lbxCounter.Items.Add(item.CounterName); //çektiğim counternameleri sağdaki listboxa yazdırdım
}
}
//3. Listboxın olaylarından (eventlarından) seçilen satırın değişmesi olayınını ekledim
private void ListBox3_SelectedIndexChanged(object sender, EventArgs e)
{
pfc.CategoryName = lbxCategory.SelectedItem.ToString();
pfc.InstanceName = lbxInstance.SelectedItem.ToString();
pfc.CounterName = lbxCounter.SelectedItem.ToString();
//en yukarda oluşturduğum performancecounter nesneme, 3 listboxtanda seçtiğim satırlardaki değerlerle değiştirdim
timer1.Enabled = true; //sağdaki countername listesinde satır seçilirse veya değiştirilse timer aktif olsun
}
private void Timer1_Tick(object sender, EventArgs e)
{
//timer aktif olduğu durumda performancecounter nesnemdeki değeri labele yazdırsın
lblDeger.Text = pfc.NextValue().ToString();
}
}
}
Programımız çalıştıralım.
Gördüğünüz gibi PerformanceCounter kullanarak sistem hakkında birçok bilgiyi edinebiliyoruz.
Başka konularda görüşmek üzere, iyi forumlar.
Uyarı: Kodları kopyala-yapıştır şekilde projeye ekleyecekseniz, listboxların olaylarını bizzat kendiniz listboxları seçerek olaylarından (event)ekleyiniz ve aynı şekilde form1'in Load olayını da kendiniz eklemelisiniz.