PerformanceCounterCategory Sınıf

Tanım

Performans sayaçları kategorisini tanımlayan bir performans nesnesini temsil eder.

public ref class PerformanceCounterCategory sealed
public sealed class PerformanceCounterCategory
type PerformanceCounterCategory = class
Public NotInheritable Class PerformanceCounterCategory
Devralma
PerformanceCounterCategory

Örnekler

Aşağıdaki kod örneği ve değerlerinin PerformanceCounterCategory yerel bilgisayarda mı yoksa başka bir bilgisayarda mı mevcut olduğunu PerformanceCounter belirler. Bu nesneler yerel bilgisayarda yoksa, örnek isteğe bağlı olarak bunları oluşturur. var olup olmadığını PerformanceCounterCategory belirlemek için yöntemini kullanırExists. PerformanceCounterCategory yoksa ve sayaç adı belirtilmezse veya bilgisayar uzak bir makineyse, örnekten çıkılır.

Bir PerformanceCounter ad sağlanırsa, örnekte yöntemi kullanılır CounterExists ve sonuç kullanıcıya görüntülenir. PerformanceCounter yoksa, kullanıcı yeni PerformanceCounterile öğesini PerformanceCounterCategory silebilir ve yeniden oluşturabilir. Kullanıcı bunu yaparsa, kategori yöntemi kullanılarak Delete silinir.

İstenirse, örnek şimdi yeniyi PerformanceCounterCategory oluşturur ve PerformanceCounter yöntemini kullanır Create . Örnek adı belirtilirse, örnek yöntemini kullanır InstanceExists ve sonucu görüntüler.

using System;
using System.Diagnostics;
using Microsoft.VisualBasic;

class PerfCounterCatCreateExistMod
{

    public static void Main(string[] args)
    {
        string categoryName = "";
        string counterName = "";
        string instanceName = "";
        string machineName = "";
        string categoryHelp = "";
        string counterHelp = "";
        bool objectExists = false;
        PerformanceCounterCategory pcc;
        bool createCategory = false;

        // Copy the supplied arguments into the local variables.
        try
        {
            categoryName = args[0];
            counterName = args[1];
            instanceName = args[2];
            machineName = args[3]=="."? "": args[3];
            categoryHelp = args[4];
            counterHelp = args[5];
        }
        catch(Exception ex)
        {
            // Ignore the exception from non-supplied arguments.
        }

        // Verify that the category name is not blank.
        if (categoryName.Length==0)
        {
            Console.WriteLine("Category name cannot be blank.");
            return;
        }

        // Check whether the specified category exists.
        if (machineName.Length==0)
        {
            objectExists = PerformanceCounterCategory.Exists(categoryName);

        }
        else
        {
            // Handle the exception that is thrown if the computer
            // cannot be found.
            try
            {
                objectExists = PerformanceCounterCategory.Exists(categoryName, machineName);
            }
            catch(Exception ex)
            {
                Console.WriteLine("Error checking for existence of " +
                    "category \"{0}\" on computer \"{1}\":"+"\n" +ex.Message, categoryName, machineName);
                return;
            }
        }

        // Tell the user whether the specified category exists.
        Console.WriteLine("Category \"{0}\" "+ (objectExists? "exists on ": "does not exist on ")+
            (machineName.Length>0? "computer \"{1}\".": "this computer."), categoryName, machineName);

        // If no counter name is given, the program cannot continue.
        if (counterName.Length==0)
        {
            return;
        }

        // A category can only be created on the local computer.
        if (!objectExists)
        {
            if (machineName.Length>0)
            {
                return;
            }
            else
            {
                createCategory = true;
            }
        }
        else
        {
            // Check whether the specified counter exists.
            if (machineName.Length==0)
            {
                objectExists = PerformanceCounterCategory.CounterExists(counterName, categoryName);
            }
            else
            {
                objectExists = PerformanceCounterCategory.CounterExists(counterName, categoryName, machineName);
            }

            // Tell the user whether the counter exists.
            Console.WriteLine("Counter \"{0}\" "+(objectExists? "exists": "does not exist")+
                " in category \"{1}\" on "+(machineName.Length>0? "computer \"{2}\".": "this computer."),
                counterName, categoryName, machineName);

            // If the counter does not exist, consider creating it.
            if (!objectExists)

                // If this is a remote computer,
                // exit because the category cannot be created.
            {
                if (machineName.Length>0)
                {
                    return;
                }
                else
                {
                    // Ask whether the user wants to recreate the category.
                    Console.Write("Do you want to delete and recreate " +
                        "category \"{0}\" with your new counter? [Y/N]: ", categoryName);
                    string userReply = Console.ReadLine();

                    // If yes, delete the category so it can be recreated later.
                    if (userReply.Trim().ToUpper()=="Y")
                    {
                        PerformanceCounterCategory.Delete(categoryName);
                        createCategory = true;
                    }
                    else
                    {
                        return;
                    }
                }
            }
        }

        // Create the category if it was deleted or it never existed.
        if (createCategory)
        {
            pcc = PerformanceCounterCategory.Create(categoryName, categoryHelp, counterName, counterHelp);

            Console.WriteLine("Category \"{0}\" with counter \"{1}\" created.", pcc.CategoryName, counterName);
        }
        else if(instanceName.Length>0)
        {
            if (machineName.Length==0)
            {
                objectExists = PerformanceCounterCategory.InstanceExists(instanceName, categoryName);
            }
            else
            {
                objectExists = PerformanceCounterCategory.InstanceExists(instanceName, categoryName, machineName);
            }

            // Tell the user whether the instance exists.
            Console.WriteLine("Instance \"{0}\" "+(objectExists? "exists": "does not exist")+
                " in category \"{1}\" on " + (machineName.Length>0? "computer \"{2}\".": "this computer."),
                instanceName, categoryName, machineName);
        }
    }
}
Imports System.Diagnostics

Module PerfCounterCatCreateExistMod

    Sub Main(ByVal args() As String)
        Dim categoryName As String = ""
        Dim counterName As String = ""
        Dim instanceName As String = ""
        Dim machineName As String = ""
        Dim categoryHelp As String = ""
        Dim counterHelp As String = ""
        Dim objectExists As Boolean = False
        Dim pcc As PerformanceCounterCategory
        Dim createCategory As Boolean = False

        ' Copy the supplied arguments into the local variables.
        Try
            categoryName = args(0)
            counterName = args(1)
            instanceName = args(2)
            machineName = IIf(args(3) = ".", "", args(3))
            categoryHelp = args(4)
            counterHelp = args(5)
        Catch ex As Exception
            ' Ignore the exception from non-supplied arguments.
        End Try

        ' Verify that the category name is not blank.
        If categoryName.Length = 0 Then
            Console.WriteLine("Category name cannot be blank.")
            Return
        End If

        ' Check whether the specified category exists.
        If machineName.Length = 0 Then
            objectExists = _
                PerformanceCounterCategory.Exists(categoryName)

        Else
            ' Handle the exception that is thrown if the computer 
            ' cannot be found.
            Try
                objectExists = PerformanceCounterCategory.Exists( _
                    categoryName, machineName)
            Catch ex As Exception
                Console.WriteLine("Error checking for existence of " & _
                    "category ""{0}"" on computer ""{1}"":" & vbCrLf & _
                    ex.Message, categoryName, machineName)
                Return
            End Try
        End If

        ' Tell the user whether the specified category exists.
        Console.WriteLine("Category ""{0}"" " & _
            IIf(objectExists, "exists on ", "does not exist on ") & _
            IIf(machineName.Length > 0, _
                "computer ""{1}"".", "this computer."), _
            categoryName, machineName)

        ' If no counter name is given, the program cannot continue.
        If counterName.Length = 0 Then
            Return
        End If

        ' A category can only be created on the local computer.
        If Not objectExists Then
            If machineName.Length > 0 Then
                Return
            Else
                createCategory = True
            End If
        Else
            ' Check whether the specified counter exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.CounterExists( _
                    counterName, categoryName, machineName)
            End If

            ' Tell the user whether the counter exists.
            Console.WriteLine("Counter ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                counterName, categoryName, machineName)

            ' If the counter does not exist, consider creating it.
            If Not objectExists Then

                ' If this is a remote computer, 
                ' exit because the category cannot be created.
                If machineName.Length > 0 Then
                    Return
                Else
                    ' Ask whether the user wants to recreate the category.
                    Console.Write("Do you want to delete and recreate " & _
                        "category ""{0}"" with your new counter? [Y/N]: ", _
                        categoryName)
                    Dim userReply As String = Console.ReadLine()

                    ' If yes, delete the category so it can be recreated later.
                    If userReply.Trim.ToUpper.Chars(0) = "Y" Then
                        PerformanceCounterCategory.Delete(categoryName)
                        createCategory = True
                    Else
                        Return
                    End If
                End If
            End If
        End If

        ' Create the category if it was deleted or it never existed.
        If createCategory Then
            pcc = PerformanceCounterCategory.Create( _
                categoryName, categoryHelp, counterName, counterHelp)

            Console.WriteLine( _
                "Category ""{0}"" with counter ""{1}"" created.", _
                pcc.CategoryName, counterName)

        ElseIf instanceName.Length > 0 Then

            ' If an instance name was given, check whether it exists.
            If machineName.Length = 0 Then
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName)
            Else
                objectExists = PerformanceCounterCategory.InstanceExists( _
                    instanceName, categoryName, machineName)
            End If

            ' Tell the user whether the instance exists.
            Console.WriteLine("Instance ""{0}"" " & _
                IIf(objectExists, "exists", "does not exist") & _
                " in category ""{1}"" on " & _
                IIf(machineName.Length > 0, _
                    "computer ""{2}"".", "this computer."), _
                instanceName, categoryName, machineName)
        End If
    End Sub
End Module

Açıklamalar

Önemli

Performans sayacı oluşturmak veya silmek için, adlandırılmış bir mutex kullanarak temel alınan kodun eşitlenmesi gerekir. Yüksek ayrıcalıklı bir uygulama adlandırılmış mutex'i kilitlerse, performans sayacı oluşturma veya silme girişimleri, kilit serbest bırakılana kadar uygulamanın yanıt vermeyi durdurmasına neden olur. Bu sorunu önlemeye yardımcı olmak için, güvenilmeyen koda hiçbir zaman izin vermeyin UnmanagedCode . Buna ek olarak, UnmanagedCode izin diğer izinlerin atlanmasına izin verir ve yalnızca yüksek oranda güvenilen koda verilmelidir.

Örneğin PerformanceCounterCategoryCategoryName özelliği, Performans Görüntüleyicisi uygulamasının Sayaç Ekle iletişim kutusunun Performans Nesnesi alanında görüntülenir.

sınıfı, PerformanceCounterCategory bilgisayardaki sayaçlar ve kategorilerle etkileşime yönelik çeşitli yöntemler sağlar. Yöntemler Create , özel kategoriler tanımlamanızı sağlar. Delete yöntemi, kategorileri bilgisayardan kaldırmanın bir yolunu sağlar. GetCategories yöntemi, kategorilerin listesini görüntülemenizi sağlarkenReadCategory, tek bir kategoriyle ilişkili tüm sayaç ve örnek verilerini alır.

Performans sayacı bir uygulamayla ilgili performans verilerini yayımlar. Kategoriler fiziksel bileşenleri (işlemciler, diskler ve bellek gibi) ve sistem nesnelerini (işlemler ve iş parçacıkları gibi) içerir. Aynı performans nesnesiyle ilişkili sistem sayaçları, ortak odaklarını gösteren bir kategoride gruplandırılır. Sınıfın PerformanceCounter bir örneğini oluşturduğunuzda, önce bileşenin etkileşimde bulunacağı kategoriyi belirtir ve ardından bu kategoriden bir sayaç seçersiniz.

Örneğin, bir Windows sayaç kategorisi Bellek kategorisidir. Bu kategorideki sistem sayaçları kullanılabilir bayt sayısı ve önbelleğe alınan bayt sayısı gibi bellek verilerini izler. Uygulamanızda önbelleğe alınmış baytlarla çalışmak isterseniz bileşenin PerformanceCounter bir örneğini oluşturur, Bellek kategorisine bağlar ve ardından ilgili kategoriden uygun sayacı (bu örnekte Önbelleğe Alınmış Baytlar) seçersiniz.

Sisteminiz daha birçok sayaç kategorisi sunsa da, büyük olasılıkla en sık etkileşim kuracağınız kategoriler Önbellek, Bellek, Nesneler, PhysicalDisk, İşlem, İşlemci, Sunucu, Sistem ve İş Parçacığı kategorileridir.

Önemli

RemoveInstance sınıfındaki PerformanceCounter yöntemi sayacı serbest bırakır ve bu kategori için yeniden kullanma seçeneği belirlenirse sayacın örneği yeniden kullanılır. Başka bir işlem veya kodun başka bir bölümü sayaç örneğine yazmaya çalışıyorsa bu durum yarış durumuna neden olabilir.

Not

Uygulamanın yürütülmesi sırasında değil, uygulamanın yüklenmesi sırasında yeni performans sayacı kategorilerinin oluşturulması kesinlikle önerilir. Bu, işletim sisteminin kayıtlı performans sayacı kategorileri listesini yenilemesine zaman tanır. Liste yenilenmediyse, kategoriyi kullanma girişimi başarısız olur.

Not

.NET Framework 2.0 ile yüklenen performans sayacı kategorileri, her performans sayacı kategorisinin kendi belleğine sahip olduğu ayrı paylaşılan bellek kullanır. Kategori adı\Performans HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kayıt defteri anahtarında <FileMappingSize adlı bir DWORD oluşturarak ayrı paylaşılan belleğin boyutunu belirtebilirsiniz.> FileMappingSize değeri, kategorinin paylaşılan bellek boyutuna ayarlanır. Varsayılan boyut ondalık 131072. FileMappingSize değeri yoksa, fileMappingSize Machine.config dosyasında belirtilen öğenin öznitelik değeri performanceCounters kullanılır ve bu da yapılandırma dosyası işleme için ek yüke neden olur. Kayıt defterinde dosya eşleme boyutunu ayarlayarak uygulama başlatma için bir performans geliştirmesi gerçekleştirebilirsiniz. Dosya eşleme boyutu hakkında daha fazla bilgi için bkz <. performanceCounters>.

Oluşturucular

PerformanceCounterCategory()

sınıfının yeni bir örneğini PerformanceCounterCategory başlatır, özelliği boş bırakır CategoryName ve özelliği yerel bilgisayara ayarlar MachineName .

PerformanceCounterCategory(String)

sınıfının yeni bir örneğini PerformanceCounterCategory başlatır, özelliği belirtilen değere ayarlar CategoryName ve özelliği yerel bilgisayara ayarlar MachineName .

PerformanceCounterCategory(String, String)

sınıfının yeni bir örneğini PerformanceCounterCategory başlatır ve ve MachineName özelliklerini belirtilen değerlere ayarlarCategoryName.

Özellikler

CategoryHelp

Kategorinin yardım metnini alır.

CategoryName

Bu kategoriyi tanımlayan performans nesnesinin adını alır veya ayarlar.

CategoryType

Performans sayacı kategori türünü alır.

MachineName

Bu kategorinin bulunduğu bilgisayarın adını alır veya ayarlar.

Yöntemler

CounterExists(String)

Belirtilen sayacın ve MachineName özellikleriyle CategoryName gösterilen bu kategoriye kaydedilip kaydedilmediğini belirler.

CounterExists(String, String)

Belirtilen sayacın yerel bilgisayarda belirtilen kategoriye kaydedilip kaydedilmediğini belirler.

CounterExists(String, String, String)

Belirtilen sayacın uzak bilgisayarda belirtilen kategoriye kaydedilip kaydedilmediğini belirler.

Create(String, String, CounterCreationDataCollection)
Geçersiz.
Geçersiz.
Geçersiz.

Yerel bilgisayarda belirtilen sayaçları içeren özel performans sayacı kategorisini kaydeder.

Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection)

Yerel bilgisayarda belirtilen sayaçları içeren özel performans sayacı kategorisini kaydeder.

Create(String, String, PerformanceCounterCategoryType, String, String)

Yerel bilgisayarda türünde tek bir sayaç içeren özel performans sayacı NumberOfItems32 kategorisini kaydeder.

Create(String, String, String, String)
Geçersiz.
Geçersiz.
Geçersiz.

Yerel bilgisayarda türünde tek bir sayaç içeren özel bir performans sayacı NumberOfItems32 kategorisini kaydeder.

Delete(String)

Kategoriyi ve ilişkili sayaçlarını yerel bilgisayardan kaldırır.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
Exists(String)

Kategorinin yerel bilgisayarda kayıtlı olup olmadığını belirler.

Exists(String, String)

Kategorinin belirtilen bilgisayarda kayıtlı olup olmadığını belirler.

GetCategories()

Yerel bilgisayarda kayıtlı performans sayacı kategorilerinin listesini alır.

GetCategories(String)

Belirtilen bilgisayarda kayıtlı performans sayacı kategorilerinin listesini alır.

GetCounters()

Tam olarak bir örnek içeren bir performans sayacı kategorisindeki sayaçların listesini alır.

GetCounters(String)

Bir veya daha fazla örnek içeren bir performans sayacı kategorisindeki sayaçların listesini alır.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetInstanceNames()

Bu kategoriyle ilişkili performans nesnesi örneklerinin listesini alır.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
InstanceExists(String)

Belirtilen performans nesnesi örneğinin bu PerformanceCounterCategoryCategoryName nesnenin özelliği tarafından tanımlanan kategoride var olup olmadığını belirler.

InstanceExists(String, String)

Yerel bilgisayardaki belirtilen bir kategorinin belirtilen performans nesnesi örneğini içerip içermediğini belirler.

InstanceExists(String, String, String)

Belirtilen bilgisayardaki belirtilen bir kategorinin belirtilen performans nesnesi örneğini içerip içermediğini belirler.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ReadCategory()

Bu performans sayacı kategorisiyle ilişkili tüm sayaç ve performans nesnesi örneği verilerini okur.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.