PerformanceCounterCategory クラス
アセンブリ: System (system.dll 内)


![]() |
---|
このクラスに適用される HostProtectionAttribute 属性の Resources プロパティの値は、Synchronization または SharedState です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。 |
![]() |
---|
パフォーマンス カウンタを作成または削除する場合、名前付きミューテックスを使用して基になるコードを同期する必要があります。高度な特権が付与されたアプリケーションが名前付きミューテックスをロックしている場合、パフォーマンス カウンタを作成または削除しようとしても、ロックが解除されるまでアプリケーションは応答しません。この問題を回避するために、信頼関係のないコードには UnmanagedCode アクセス許可を付与しないでください。また、UnmanagedCode アクセス許可を使用すると、他のアクセス許可をバイパスできる可能性もあるため、信頼度の高いコードにだけこのアクセス許可を付与する必要があります。
|
PerformanceCounterCategory インスタンスの CategoryName プロパティは、パフォーマンス ビューワ アプリケーションの [カウンタの追加] ダイアログ ボックスの [パフォーマンス オブジェクト] ボックスに表示されます。
PerformanceCounterCategory クラスには、コンピュータ上のカウンタおよびカテゴリとやり取りするいくつかのメソッドがあります。Create メソッドを使用すると、カスタム カテゴリを定義できます。Delete メソッドを使用すると、コンピュータからカテゴリを削除できます。GetCategories メソッドを使用すると、カテゴリの一覧を表示できます。ReadCategory を使用すると、単一カテゴリに関連付けられているすべてのカウンタとインスタンスのデータを取得できます。
パフォーマンス カウンタは、アプリケーションに関するパフォーマンス データを発行します。カテゴリには、物理的なコンポーネント (プロセッサ、ディスク、メモリなど) とシステム オブジェクト (プロセス、スレッドなど) が含まれます。同じパフォーマンス オブジェクトに関連するシステム カウンタは、共通のフォーカスを指すカテゴリにグループ化されます。PerformanceCounter クラスのインスタンスを作成するときは、まずコンポーネントがやり取りするカテゴリを指示し、次にカテゴリからカウンタを選択します。
たとえば、Windows カウンタ カテゴリの 1 つに、Memory カテゴリがあります。このカテゴリにあるシステム カウンタは、利用できるバイト数やキャッシュされているバイト数などのメモリのデータを追跡します。アプリケーションでキャッシュされているバイトを操作する場合は、PerformanceCounter コンポーネントのインスタンスを作成し、そのインスタンスを Memory カテゴリに接続し、このカテゴリから適切なカウンタ (この例では Cached Bytes) を選択します。
システムで利用できるカウンタ カテゴリは多数ありますが、頻繁にやり取りするカテゴリは、Cache、Memory、Objects、PhysicalDisk、Process、Processor、Server、System、および Thread です。

PerformanceCounter および PerformanceCounterCategory がローカル コンピュータまたは別のコンピュータに存在するかどうかを判断するコード例を次に示します。この例では、これらのオブジェクトがローカル コンピュータに存在しない場合は必要に応じて作成します。Exists メソッドを使用して、PerformanceCounterCategory が存在するかどうかを判断します。PerformanceCounterCategory が存在せず、カウンタ名が指定されていない場合、またはコンピュータがリモート マシンである場合は終了します。
PerformanceCounter 名が指定されている場合、この例では CounterExists メソッドを使用して結果を表示します。PerformanceCounter が存在しない場合、ユーザーは、PerformanceCounterCategory を削除し、新しい PerformanceCounter で再作成できます。この処理が行われなかった場合は、Delete メソッドによってカテゴリが削除されます。
要求に応じて、この例では Create メソッドを使用して新しい PerformanceCounterCategory および PerformanceCounter を作成します。インスタンス名が指定されている場合は、InstanceExists メソッドを使用して結果を表示します。
Imports System Imports System.Diagnostics Imports Microsoft.VisualBasic 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

System.Diagnostics.PerformanceCounterCategory


Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


PerformanceCounterCategory メンバ
System.Diagnostics 名前空間
PerformanceCounter クラス
CounterCreationDataCollection クラス
CounterSample 構造体
- PerformanceCounterCategory クラスのページへのリンク