PerformanceCounterCategory Klass

Definition

Representerar ett prestandaobjekt som definierar en kategori med prestandaräknare.

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

Exempel

I följande kodexempel avgörs om en PerformanceCounter och dess PerformanceCounterCategory finns på den lokala datorn eller på en annan dator. Om dessa objekt inte finns på den lokala datorn kan du skapa dem i exemplet. Den använder Exists metoden för att avgöra om den PerformanceCounterCategory finns. Om inte PerformanceCounterCategory finns och inget räknarnamn har angetts, eller om datorn är en fjärrdator, avslutas exemplet.

Om ett PerformanceCounter namn anges använder CounterExists exemplet metoden och visar resultatet för användaren. Om inte PerformanceCounter finns kan användaren ta bort och återskapa PerformanceCounterCategory med den nya PerformanceCounter. Om användaren gör det tas kategorin bort med hjälp av Delete metoden .

Om det begärs skapar exemplet nu det nya PerformanceCounterCategory och PerformanceCounter med hjälp av Create metoden. Om ett instansnamn anges använder InstanceExists exemplet metoden och visar resultatet.

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

Kommentarer

Viktigt!

För att skapa eller ta bort en prestandaräknare krävs synkronisering av den underliggande koden med hjälp av en namngiven mutex. Om ett högprivilegierat program låser den namngivna mutexen, gör försök att skapa eller ta bort en prestandaräknare att programmet slutar svara tills låset släpps. För att undvika det här problemet kan du aldrig ge UnmanagedCode behörighet till kod som inte är betrodd. Dessutom UnmanagedCode kan behörigheter eventuellt tillåta att andra behörigheter kringgås och bör endast beviljas mycket betrodd kod.

Instansens PerformanceCounterCategoryCategoryName egenskap visas i fältet Prestandaobjekt i dialogrutan Lägg till räknare i programmet Prestandavisning.

Klassen PerformanceCounterCategory innehåller flera metoder för att interagera med räknare och kategorier på datorn. Med Create metoderna kan du definiera anpassade kategorier. Metoden Delete ger ett sätt att ta bort kategorier från datorn. Med GetCategories metoden kan du visa listan över kategorier, samtidigt ReadCategory som alla räknar- och instansdata som är associerade med en enda kategori hämtas.

En prestandaräknare publicerar prestandadata om ett program. Kategorier omfattar fysiska komponenter (till exempel processorer, diskar och minne) och systemobjekt (till exempel processer och trådar). Systemräknare som är relaterade till samma prestandaobjekt grupperas i en kategori som anger deras gemensamma fokus. När du skapar en instans av PerformanceCounter klassen anger du först den kategori som komponenten ska interagera med och sedan väljer du en räknare från den kategorin.

En Windows räknarkategori är till exempel kategorin Minne. Systemräknare i den här kategorin spårar minnesdata, till exempel antalet tillgängliga byte och antalet cachelagrade byte. Om du vill arbeta med byte som cachelagras i ditt program skapar du en instans av komponenten PerformanceCounter , ansluter den till kategorin Minne och väljer sedan lämplig räknare (i det här fallet cachelagrade byte) från den kategorin.

Även om systemet gör många fler räknare tillgängliga är de kategorier som du förmodligen interagerar med oftast kategorierna Cache, Minne, Objekt, PhysicalDisk, Process, Processor, Server, System och Thread.

Viktigt!

Metoden RemoveInstance i PerformanceCounter klassen släpper räknaren och om återanvändningsalternativet har valts för den kategorin återanvänds räknarens instans. Detta kan orsaka ett konkurrenstillstånd om en annan process eller till och med en annan del av koden försöker skriva till räknarinstansen.

Anteckning

Vi rekommenderar starkt att nya prestandaräknare kategorier skapas under installationen av programmet, inte under körningen av programmet. Detta gör det möjligt för operativsystemet att uppdatera sin lista över registrerade kategorier för prestandaräknare. Om listan inte har uppdaterats misslyckas försöket att använda kategorin.

Anteckning

Prestandaräknare som installeras med .NET använda separat delat minne, där varje kategori för prestandaräknare har sitt eget minne. Du kan ange storleken på separat delat minne genom att skapa ett DWORD med namnet FileMappingSize i registernyckeln HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<kategorinamn>\Prestanda. Värdet FileMappingSize är inställt på kategorins delade minnesstorlek. Standardstorleken är 131072 decimal. Om värdet FileMappingSize inte finns fileMappingSize används attributvärdet för elementet performanceCounters som anges i Machine.config-filen, vilket orsakar ytterligare omkostnader för bearbetning av konfigurationsfiler. Du kan se en prestandaförbättring för programstart genom att ange filmappningsstorleken i registret. Mer information om filmappningsstorleken finns i <performanceCounters>.

Konstruktorer

Name Description
PerformanceCounterCategory()

Initierar en ny instans av PerformanceCounterCategory klassen, lämnar CategoryName egenskapen tom och anger MachineName egenskapen till den lokala datorn.

PerformanceCounterCategory(String, String)

Initierar en ny instans av PerformanceCounterCategory klassen och anger CategoryName egenskaperna och MachineName till de angivna värdena.

PerformanceCounterCategory(String)

Initierar en ny instans av PerformanceCounterCategory klassen, anger CategoryName egenskapen till det angivna värdet och anger MachineName egenskapen till den lokala datorn.

Egenskaper

Name Description
CategoryHelp

Hämtar kategorins hjälptext.

CategoryName

Hämtar eller anger namnet på prestandaobjektet som definierar den här kategorin.

CategoryType

Hämtar kategoritypen prestandaräknare.

MachineName

Hämtar eller anger namnet på den dator där den här kategorin finns.

Metoder

Name Description
CounterExists(String, String, String)

Avgör om den angivna räknaren är registrerad i den angivna kategorin på en fjärrdator.

CounterExists(String, String)

Avgör om den angivna räknaren är registrerad i den angivna kategorin på den lokala datorn.

CounterExists(String)

Avgör om den angivna räknaren är registrerad i den här kategorin, vilket anges av CategoryName egenskaperna och MachineName .

Create(String, String, CounterCreationDataCollection)
Föråldrad.

Registrerar kategorin för anpassade prestandaräknare som innehåller de angivna räknarna på den lokala datorn.

Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection)

Registrerar kategorin för anpassade prestandaräknare som innehåller de angivna räknarna på den lokala datorn.

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

Registrerar kategorin för anpassade prestandaräknare som innehåller en enskild räknare av typen NumberOfItems32 på den lokala datorn.

Create(String, String, String, String)
Föråldrad.

Registrerar en anpassad prestandaräknare som innehåller en enskild räknare av typen NumberOfItems32 på den lokala datorn.

Delete(String)

Tar bort kategorin och dess associerade räknare från den lokala datorn.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
Exists(String, String)

Avgör om kategorin är registrerad på den angivna datorn.

Exists(String)

Avgör om kategorin är registrerad på den lokala datorn.

GetCategories()

Hämtar en lista över kategorierna för prestandaräknare som är registrerade på den lokala datorn.

GetCategories(String)

Hämtar en lista över de prestandaräknarekategorier som är registrerade på den angivna datorn.

GetCounters()

Hämtar en lista över räknarna i en prestandaräknarekategori som innehåller exakt en instans.

GetCounters(String)

Hämtar en lista över räknarna i en prestandaräknarekategori som innehåller en eller flera instanser.

GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetInstanceNames()

Hämtar listan över prestandaobjektinstanser som är associerade med den här kategorin.

GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
InstanceExists(String, String, String)

Avgör om en angiven kategori på en angiven dator innehåller den angivna prestandaobjektinstansen.

InstanceExists(String, String)

Avgör om en angiven kategori på den lokala datorn innehåller den angivna prestandaobjektinstansen.

InstanceExists(String)

Avgör om den angivna prestandaobjektinstansen finns i den kategori som identifieras av objektets PerformanceCounterCategoryCategoryName egenskap.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ReadCategory()

Läser alla instansdata för räknar- och prestandaobjekt som är associerade med den här prestandaräknarens kategori.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för

Se även