Cara bekerja dengan kaunter prestasi di C #

Windows memerhatikan proses dan perkhidmatan yang berjalan di sistem anda dengan mengesan benang yang sedang dijalankan, memori CLR, dll. Anda sering perlu mengukur prestasi sistem komputer atau aplikasi yang berjalan di dalamnya kepada metrik seperti penggunaan sumber dalam sistem, perkhidmatan yang berjalan pada sistem, atau prestasi peranti yang terpasang pada sistem.

Kaunter prestasi (ciri yang disediakan secara lalai) memungkinkan kita menangkap, menerbitkan dan menganalisis data prestasi yang berkaitan dengan satu atau lebih aplikasi atau perkhidmatan yang berjalan di sistem atau sistem secara keseluruhan.

Semasa membuat aplikasi, anda mungkin perlu memantau kinerjanya (penggunaan atau penggunaan sumber dalam jangka waktu tertentu) dan menggunakan data prestasi untuk mengenal pasti hambatan dalam aplikasi. Di sinilah kaunter prestasi sangat berguna. Anda juga dapat menggunakan WMI (Windows Management Instrumentation), teknologi Microsoft berasaskan COM, untuk mendapatkan butiran ini, tetapi kaunter prestasi memberikan anda cara untuk mendapatkan statistik penggunaan sumber masa nyata dalam sistem anda pada waktu runtime.

Snap-in Monitor Prestasi (alat yang disediakan secara lalai dalam OS Windows) dapat digunakan untuk melihat data prestasi secara real time. Untuk memulakan alat ini, klik pada menu Start dan klik pada "Run". Seterusnya, ketik "perfmon" dan tekan enter.

Pembilang Prestasi Tersuai

Membuat kaunter prestasi tersuai adalah mudah. Anda boleh membuat pembilang prestasi menggunakan Server Explorer. Anda perlu membuat kategori kaunter prestasi terlebih dahulu dan kemudian membuat satu atau lebih kaunter sebagai sebahagian daripada kategori tersebut.

Untuk bekerja dengan kaunter prestasi secara program, anda boleh menggunakan kelas System.Diagnostics.PerformanceCounter. Anda perlu membuat contoh kelas PerformanceCounter dan kemudian menentukan nilai yang diperlukan untuk setiap sifat ini: CategoryName, CounterName, MachineName dan ReadOnly.

Untuk membuat kategori penghitung prestasi tersuai, anda perlu memanfaatkan kaedah Buat dari kelas PerformanceCounterCategory. Sebagai contoh, coretan kod berikut dapat digunakan untuk membuat kategori pembilang prestasi tersuai.

PerformanceCounterCategory.Create("CustomPerformanceCounterCategoryName", "CustomPerformanceCounterHelp", PerformanceCounterCategoryType.MultiInstance,

"CustomPerformanceCounterName", "CustomPerformanceCounterHelp");

Coretan kod berikut menunjukkan bagaimana anda dapat memaparkan semua kategori pembilang prestasi yang ada.

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories();

        foreach(PerformanceCounterCategory performanceCounterCategory in performanceCounterCategories)

        {

         Console.WriteLine(performanceCounterCategory.CategoryName);

        }

        Console.Read();

    }

Coretan kod berikut menggambarkan bagaimana anda boleh mendapatkan kaunter prestasi yang tergolong dalam kategori "Pemproses".

var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

     .FirstOrDefault(category => category.CategoryName == "Processor");

var performanceCounters = performanceCounterCategories.GetCounters("_Total");

Anda perlu menggunakan kelas PerformanceCounter untuk membaca pembilang prestasi yang tergolong dalam kategori tertentu. Perhatikan bahawa kelas PerformanceCounter tersedia di ruang nama System.Diagnostics. Berikut adalah senarai kod lengkap yang menunjukkan bagaimana anda dapat memaparkan nama pembilang prestasi semua kaunter prestasi yang tergolong dalam kategori "Pemproses".

static void Main()

    {

        var performanceCounterCategories = PerformanceCounterCategory.GetCategories()

            .FirstOrDefault(category => category.CategoryName == "Processor");

        var performanceCounters = performanceCounterCategories.GetCounters("_Total");

        Console.WriteLine("Displaying performance counters for Processor category:--\n");

        foreach (PerformanceCounter performanceCounter in performanceCounters)

        {

            Console.WriteLine(performanceCounter.CounterName);

        }

        Console.Read();

    }

Anda juga boleh membuat kaunter prestasi tersuai dan menulis data di dalamnya. Untuk melakukan ini, anda harus memanfaatkan kelas CounterCreationDataCollection dan CounterCreationData.

String customCategory = "Custom Performance Counter Category";

if (!PerformanceCounterCategory.Exists(customCategory))

{

CounterCreationDataCollection counterCreationDataCollection = new CounterCreationDataCollection();

counterCreationDataCollection.Add(new CounterCreationData("Counter 1", "Sample Counter 1", PerformanceCounterType.ElapsedTime));

counterCreationDataCollection.Add(new CounterCreationData("Counter 2", "Sample Counter 2", PerformanceCounterType.SampleCounter));

counterCreationDataCollection.Add(new CounterCreationData("Counter 3", "Sample Counter 3", PerformanceCounterType.SampleCounter));

PerformanceCounterCategory.Create(customCategory, "This is just an example", PerformanceCounterCategoryType.SingleInstance, counterCreationDataCollection);

}

Perhatikan bahawa pemeriksaan jika dibuat untuk mengesahkan apakah kaunter prestasi khusus yang akan dibuat sudah ada. Kaunter prestasi tersuai hanya dibuat jika tidak ada. Seterusnya, contoh CounterCreaionDataCollection dibuat. Menggunakan kelas CounterCreationData, kaunter baru ditambahkan ke koleksi. Setelah pembilang yang diperlukan telah ditambahkan, kaedah Buat kelas PerformanceCounterCategory dipanggil untuk membuat kategori prestasi tersuai.

Perhatikan bahawa aplikasi anda harus mempunyai izin yang diperlukan untuk mengakses kaunter prestasi yang anda perlukan. Saya selalu mengesyorkan untuk memulakan Visual Studio IDE dalam mod Pentadbir. Kaunter prestasi banyak membantu menganalisis prestasi aplikasi anda - anda dapat menganalisis data prestasi pada saat aplikasi anda dijalankan.