PerformanceCounterCategory Класс

Определение

Представляет объект производительности, который определяет категорию счетчиков производительности.Represents a performance object, which defines a category of performance counters.

public ref class PerformanceCounterCategory sealed
public sealed class PerformanceCounterCategory
type PerformanceCounterCategory = class
Public NotInheritable Class PerformanceCounterCategory
Наследование
PerformanceCounterCategory

Примеры

В следующем примере кода определяется, существует ли объект PerformanceCounter и на PerformanceCounterCategory локальном компьютере или на другом компьютере.The following code example determines whether a PerformanceCounter and its PerformanceCounterCategory exist on the local computer or on another computer. Если эти объекты не существуют на локальном компьютере, в примере их можно создать.If these objects do not exist on the local computer, the example optionally creates them. Он использует Exists метод, чтобы определить, существует ли объект PerformanceCounterCategory .It uses the Exists method to determine whether the PerformanceCounterCategory exists. Если не PerformanceCounterCategory существует и не указано имя счетчика или компьютер является удаленным компьютером, в примере выполняется выход.If the PerformanceCounterCategory does not exist and no counter name is specified, or if the computer is a remote machine, the example exits.

Если PerformanceCounter указано имя, в примере используется CounterExists метод и отображается результат для пользователя.If a PerformanceCounter name is provided, the example uses the CounterExists method and displays the result to the user. Если объект не PerformanceCounter существует, пользователь может удалить и создать его заново PerformanceCounterCategory с новым PerformanceCounter .If the PerformanceCounter does not exist, the user can delete and re-create the PerformanceCounterCategory with the new PerformanceCounter. Если пользователь делает это, Категория удаляется с помощью Delete метода.If the user does so, the category is deleted using the Delete method.

При запросе пример теперь создает новый объект PerformanceCounterCategory и PerformanceCounter использует Create метод.If requested, the example now creates the new PerformanceCounterCategory and PerformanceCounter using the Create method. Если указано имя экземпляра, то в примере используется InstanceExists метод и отображается результат.If an instance name is specified, the example uses the InstanceExists method and displays the result.

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

Комментарии

Важно!

Для создания или удаления счетчика производительности требуется синхронизация базового кода с помощью именованного мьютекса.Creating or deleting a performance counter requires synchronization of the underlying code by using a named mutex. Если приложение с высоким уровнем привилегий блокирует именованный мьютекс, попытки создать или удалить счетчик производительности приводят к тому, что приложение перестает отвечать, пока блокировка не будет снята.If a highly privileged application locks the named mutex, attempts to create or delete a performance counter causes the application to stop responding until the lock is released. Чтобы избежать этой проблемы, никогда не предоставляйте UnmanagedCode разрешение на ненадежный код.To help avoid this problem, never grant UnmanagedCode permission to untrusted code. Кроме того, UnmanagedCode разрешение, потенциально разрешающее обход других разрешений, может быть предоставлено только высоко доверенному коду.In addition, UnmanagedCode permission potentially allows other permissions to be bypassed and should only be granted to highly trusted code.

PerformanceCounterCategory CategoryName Свойство экземпляра отображается в поле Объект производительности диалогового окна Добавление счетчика приложения "средство просмотра производительности".The PerformanceCounterCategory instance's CategoryName property is displayed in the Performance Object field of the Performance Viewer application's Add Counter dialog box.

PerformanceCounterCategoryКласс предоставляет несколько методов для взаимодействия с счетчиками и категориями на компьютере.The PerformanceCounterCategory class provides several methods for interacting with counters and categories on the computer. CreateМетоды позволяют определять пользовательские категории.The Create methods enable you to define custom categories. DeleteМетод предоставляет способ удаления категорий с компьютера.The Delete method provides a way to remove categories from the computer. GetCategoriesМетод позволяет просматривать список категорий, в то время как ReadCategory извлекает все данные счетчика и экземпляра, связанные с одной категорией.The GetCategories method enables you to view the list of categories, while ReadCategory retrieves all the counter and instance data associated with a single category.

Счетчик производительности публикует данные о производительности приложения.A performance counter publishes performance data about an application. Категории включают физические компоненты (например, процессоры, диски и память) и системные объекты (например, процессы и потоки).Categories include physical components (such as processors, disks, and memory) and system objects (such as processes and threads). Системные счетчики, связанные с одним и тем же объектом производительности, группируются в категорию, которая указывает на их общий фокус.System counters that are related to the same performance object are grouped into a category that indicates their common focus. При создании экземпляра PerformanceCounter класса сначала указывается Категория, с которой будет взаимодействовать компонент, а затем выбирается счетчик из этой категории.When you create an instance of the PerformanceCounter class, you first indicate the category with which the component will interact, and then you choose a counter from that category.

Например, одна категория счетчиков Windows — это категория памяти.For example, one Windows counter category is the Memory category. Системные счетчики в этой категории следят за данными памяти, например количеством доступных байтов и числом кэшированных байтов.System counters within this category track memory data such as the number of bytes available and the number of bytes cached. Если вы хотите работать с кэшированными байтами в приложении, создайте экземпляр PerformanceCounter компонента, подключите его к категории памяти, а затем выберите соответствующий счетчик (в данном случае кэшированные байты) из этой категории.If you wanted to work with the bytes cached in your application, you would create an instance of the PerformanceCounter component, connect it to the Memory category, and then pick the appropriate counter (in this case, Cached Bytes) from that category.

Несмотря на то что в системе доступно гораздо больше категорий счетчиков, категории, которые, вероятно, взаимодействуют с наиболее часто, — это категории кэш, память, объекты, физический диск, процесс, процессор, сервер, система и поток.Although your system makes many more counter categories available, the categories that you will probably interact with most frequently are the Cache, Memory, Objects, PhysicalDisk, Process, Processor, Server, System, and Thread categories.

Важно!

RemoveInstanceМетод в PerformanceCounter классе освободит счетчик и, если для этой категории выбран параметр повторного использования, будет повторно использован экземпляр счетчика.The RemoveInstance method in the PerformanceCounter class will release the counter and, if the reuse option is selected for that category, the instance of the counter will be reused. Это может вызвать состояние гонки, если другой процесс или даже другая часть кода пытается выполнить запись в экземпляр счетчика.This could cause a race condition if another process or even another part of the code is trying to write to the counter instance.

Примечание

Настоятельно рекомендуется создавать новые категории счетчиков производительности во время установки приложения, а не во время выполнения приложения.It is strongly recommended that new performance counter categories be created during the installation of the application, not during the execution of the application. Это позволяет операционной системе обновлять список зарегистрированных категорий счетчиков производительности.This allows time for the operating system to refresh its list of registered performance counter categories. Если список не обновлялся, попытка использовать категорию завершится ошибкой.If the list has not been refreshed, the attempt to use the category will fail.

Примечание

Категории счетчиков производительности, установленные с использованием .NET Framework 2.0.NET Framework 2.0 отдельной общей памяти, каждая из категорий счетчиков производительности имеет собственную память.Performance counter categories installed with the .NET Framework 2.0.NET Framework 2.0 use separate shared memory, with each performance counter category having its own memory. Можно указать размер отдельной общей памяти, создав DWORD с именем Филемаппингсизе в разделе реестра HKEY_LOCAL_MACHINE \Систем\куррентконтролсет\сервицес \ <category name> \перформанце.You can specify the size of separate shared memory by creating a DWORD named FileMappingSize in the registry key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<category name> \Performance. Значение Филемаппингсизе устанавливается равным общему объему памяти для категории.The FileMappingSize value is set to the shared memory size of the category. Размер по умолчанию — 131072 десятичный.The default size is 131072 decimal. Если значение Филемаппингсизе отсутствует, fileMappingSize используется значение атрибута для performanceCounters элемента, указанного в файле Machine.config, что приводит к дополнительным издержкам на обработку файла конфигурации.If the FileMappingSize value is not present, the fileMappingSize attribute value for the performanceCounters element specified in the Machine.config file is used, causing additional overhead for configuration file processing. Можно повысить производительность при запуске приложения, задав размер сопоставления файлов в реестре.You can realize a performance improvement for application startup by setting the file mapping size in the registry. Дополнительные сведения о размере сопоставления файлов см. в разделе < PerformanceCounters > .For more information about the file mapping size, see <performanceCounters>.

Конструкторы

PerformanceCounterCategory()

Инициализирует новый экземпляр класса PerformanceCounterCategory, оставляет пустым свойство CategoryName и задает в качестве значения свойства MachineName локальный компьютер.Initializes a new instance of the PerformanceCounterCategory class, leaves the CategoryName property empty, and sets the MachineName property to the local computer.

PerformanceCounterCategory(String)

Инициализирует новый экземпляр класса PerformanceCounterCategory, задает для свойства CategoryName указанное значение, а в качестве значения свойства MachineName устанавливает локальный компьютер.Initializes a new instance of the PerformanceCounterCategory class, sets the CategoryName property to the specified value, and sets the MachineName property to the local computer.

PerformanceCounterCategory(String, String)

Инициализирует новый экземпляр класса PerformanceCounterCategory и присваивает свойствам CategoryName и MachineName указанные значения.Initializes a new instance of the PerformanceCounterCategory class and sets the CategoryName and MachineName properties to the specified values.

Свойства

CategoryHelp

Возвращает текст справки для данной категории.Gets the category's help text.

CategoryName

Получает или задает имя объекта производительности, который определяет эту категорию.Gets or sets the name of the performance object that defines this category.

CategoryType

Возвращает тип категории счетчика производительности.Gets the performance counter category type.

MachineName

Получает или задает имя компьютера, на котором находится эта категория.Gets or sets the name of the computer on which this category exists.

Методы

CounterExists(String)

Определяет, является ли заданный счетчик зарегистрированным в категории, на которую указывают свойства CategoryName и MachineName.Determines whether the specified counter is registered to this category, which is indicated by the CategoryName and MachineName properties.

CounterExists(String, String)

Определяет, зарегистрирован ли заданный счетчик в указанной категории на локальном компьютере.Determines whether the specified counter is registered to the specified category on the local computer.

CounterExists(String, String, String)

Определяет, зарегистрирован ли заданный счетчик в указанной категории на удаленном компьютере.Determines whether the specified counter is registered to the specified category on a remote computer.

Create(String, String, CounterCreationDataCollection)
Является устаревшей.
Является устаревшей.
Является устаревшей.

Регистрирует пользовательскую категорию счетчиков производительности, содержащую указанные счетчики на локальном компьютере.Registers the custom performance counter category containing the specified counters on the local computer.

Create(String, String, PerformanceCounterCategoryType, CounterCreationDataCollection)

Регистрирует пользовательскую категорию счетчиков производительности, содержащую указанные счетчики на локальном компьютере.Registers the custom performance counter category containing the specified counters on the local computer.

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

Регистрирует пользовательскую категорию счетчиков производительности, содержащую на локальном компьютере один счетчик типа NumberOfItems32.Registers the custom performance counter category containing a single counter of type NumberOfItems32 on the local computer.

Create(String, String, String, String)
Является устаревшей.
Является устаревшей.
Является устаревшей.

Регистрирует пользовательскую категорию счетчиков производительности, содержащую на локальном компьютере один счетчик типа NumberOfItems32.Registers a custom performance counter category containing a single counter of type NumberOfItems32 on the local computer.

Delete(String)

Удаляет категорию и связанные с ней счетчики с локального компьютера.Removes the category and its associated counters from the local computer.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Exists(String)

Определяет, зарегистрирована ли категория на локальном компьютере.Determines whether the category is registered on the local computer.

Exists(String, String)

Определяет, зарегистрирована ли категория на указанном компьютере.Determines whether the category is registered on the specified computer.

GetCategories()

Извлекает список категорий счетчиков производительности, зарегистрированных на локальном компьютере.Retrieves a list of the performance counter categories that are registered on the local computer.

GetCategories(String)

Извлекает список категорий счетчиков производительности, зарегистрированных на заданном компьютере.Retrieves a list of the performance counter categories that are registered on the specified computer.

GetCounters()

Извлекает список счетчиков в категории счетчиков производительности, содержащей только один экземпляр.Retrieves a list of the counters in a performance counter category that contains exactly one instance.

GetCounters(String)

Извлекает список счетчиков в категории счетчиков производительности, содержащей один или несколько экземпляров.Retrieves a list of the counters in a performance counter category that contains one or more instances.

GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetInstanceNames()

Извлекает список экземпляров объекта производительности, связанных с данной категорией.Retrieves the list of performance object instances that are associated with this category.

GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
InstanceExists(String)

Определяет, существует ли указанный экземпляр объекта производительности в категории, определяемой свойством PerformanceCounterCategory объекта CategoryName.Determines whether the specified performance object instance exists in the category that is identified by this PerformanceCounterCategory object's CategoryName property.

InstanceExists(String, String)

Определяет, содержит ли указанная категория заданный экземпляр объекта производительности на локальном компьютере.Determines whether a specified category on the local computer contains the specified performance object instance.

InstanceExists(String, String, String)

Определяет, содержит ли указанная категория на заданном компьютере заданный экземпляр объекта производительности.Determines whether a specified category on a specified computer contains the specified performance object instance.

MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ReadCategory()

Считывает все счетчики и данные экземпляра объекта производительности, связанные с этой категорией счетчиков производительности.Reads all the counter and performance object instance data that is associated with this performance counter category.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к

См. также раздел