2011-09-04T07:29:02の更新内容

programming/netfx/performancecounter/1_categories/index.wiki.txt

current previous
1,369 0,0
+
${smdncms:title,パフォーマンスカウンタのカテゴリ}
+
${smdncms:header_title,パフォーマンスカウンタのカテゴリ (PerformanceCounterCategory)}
+
${smdncms:keywords,PerformanceCounterCategory,カテゴリ,インスタンス}
+
${smdncms:document_versions,codelang=cs,codelang=vb}
+

          
+
#navi(..)
+

          
+
ここでは&msdn(netfx,type,System.Diagnostics.PerformanceCounterCategory){PerformanceCounterCategoryクラス};の使い方について見ていきます。 PerformanceCounterCategoryクラスはパフォーマンスカウンタのカテゴリを扱うためのクラスです。 このクラスを使うことで、パフォーマンスカウンタで計測できる値のカテゴリやインスタンス名の一覧を取得したり、カテゴリに属するカウンタを作成したりすることができます。 また、環境ごとに使用できるかどうかが異なる可能性のあるカウンタについて調べることができます。
+

          
+
#googleadunit(banner)
+

          
+
*カテゴリの列挙
+
パフォーマンスカウンタで計測できるすべてのカテゴリを列挙するには、&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.GetCategories){GetCategoriesメソッド};を使います。 このメソッドは静的メソッドで、カテゴリを表すPerformanceCounterCategoryのインスタンスを配列で返します。 &msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.CategoryName){CategoryNameプロパティ};を参照することでカテゴリ名を取得できるほか、&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.CategoryHelp){CategoryHelpプロパティ};を参照してカテゴリの説明を取得することもできます。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    foreach (var category in PerformanceCounterCategory.GetCategories()) {
+
      // CategoryNameとCategoryHelpを表示
+
      Console.WriteLine("{0} - {1}", category.CategoryName, category.CategoryHelp);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    For Each category As PerformanceCounterCategory In PerformanceCounterCategory.GetCategories()
+
      ' CategoryNameとCategoryHelpを表示
+
      Console.WriteLine("{0} - {1}", category.CategoryName, category.CategoryHelp)
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果(Windows 7での例)){{
+
USB - USB I/O カウンター
+
Thread - Thread パフォーマンス オブジェクトには、スレッド動作のアスペクトを計測するカウンターがあります。スレッドはプロセッサ上で命令を実行する基本オブジェクトです。実行中のすべてのプロセスには、少なくとも 1 つのスレッドがあります。
+
Event Tracing for Windows - このコレクションのカウンターは、Windows イベント トレーシング サブシステムのパフォーマンスについて、システム全体のメトリックを示します。
+
IPHTTPS Global - このコンピューターでの IPHTTPS サーバーの統計です。
+
HTTP Service Url Groups - URL グループ固有カウンターのセット
+
ASP.NET - ASP.NET グローバル パーフォーマンス カウンター
+
Process - Process パフォーマンス オブジェクトには、実行中のプログラムとシステム処理を監視するカウンターがあります。プロセス内のすべてのスレッドは同じアドレス領域を共有し、同じデータへアクセスします。
+
SMSvcHost 3.0.0.0 - SMSvcHost 3.0.0.0 パフォーマンス カウンタ
+
  :
+
  :
+
}}
+

          
+
[[完全なリスト>#AllCategories]]は文末にまとめています。
+

          
+
既知のカテゴリが存在するかどうかを調べるには&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.Exists){Existsメソッド};を使います。 また、コンストラクタにカテゴリ名を指定してPerformanceCounterCategoryのインスタンスを作成することもできます。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // カテゴリ名"Processor"のカウンタが存在するかどうか
+
    Console.WriteLine(PerformanceCounterCategory.Exists("Processor"));
+

          
+
    // カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    var category = new PerformanceCounterCategory("Processor");
+

          
+
    // CategoryNameとCategoryHelpを表示
+
    Console.WriteLine("{0} - {1}", category.CategoryName, category.CategoryHelp);
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' カテゴリ名"Processor"のカウンタが存在するかどうか
+
    Console.WriteLine(PerformanceCounterCategory.Exists("Processor"))
+

          
+
    ' カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    Dim category As New PerformanceCounterCategory("Processor")
+

          
+
    ' CategoryNameとCategoryHelpを表示
+
    Console.WriteLine("{0} - {1}", category.CategoryName, category.CategoryHelp)
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
True
+
Processor - Processor パフォーマンス オブジェクトには、プロセッサの処理状況のアスペクトを計測するカウンターがあります。プロセッサは、算術および論理計算の実行、周辺機器の操作の初期化、プロセスのスレッドの実行を行うコンピューターの一部です。コンピューターには複数のプロセッサを実装可能です。プロセッサ オブジェクトは、各プロセッサをオブジェクトのインスタンスとして表します。
+
}}
+

          
+
*カウンタの作成・取得
+
特定のカテゴリで計測できるカウンタを取得するには、&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.GetCounters){GetCountersメソッド};を使います。 このメソッドは、カテゴリに存在するすべてのカウンタ名に対応するPerformanceCounterのインスタンスを配列で返します。
+

          
+
このメソッドは、カテゴリによって引数でカウンタのインスタンス名を指定する必要がある場合とそうでない場合が異なります。 &msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.CategoryType){CategoryType};がMultiInstanceの場合は複数インスタンスのカテゴリ、つまりインスタンス名を指定する必要があり、SingleInstanceの場合は単一インスタンス、つまりインスタンス名を指定する必要はありません。 このメソッドに渡したインスタンス名は、そのままPerformanceCounterを作成する際のインスタンス名と同じとなります。 参考までに、[[カテゴリとCategoryTypeのリスト>#AllCategories]]を文末にまとめています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // カテゴリ名"System"のPerformanceCounterCategoryインスタンスを作成
+
    var categorySystem = new PerformanceCounterCategory("System");
+

          
+
    // インスタンス名を指定せずに、カウンタを取得
+
    foreach (var pc in categorySystem.GetCounters()) {
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10}",
+
                        pc.CategoryName,
+
                        pc.CounterName,
+
                        pc.InstanceName);
+
    }
+

          
+
    Console.WriteLine();
+

          
+
    // カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    var categoryProcessor = new PerformanceCounterCategory("Processor");
+

          
+
    // インスタンス名"_Total"に対応するカウンタを取得
+
    foreach (var pc in categoryProcessor.GetCounters("_Total")) {
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10}",
+
                        pc.CategoryName,
+
                        pc.CounterName,
+
                        pc.InstanceName);
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' カテゴリ名"System"のPerformanceCounterCategoryインスタンスを作成
+
    Dim categorySystem As New PerformanceCounterCategory("System")
+

          
+
    ' インスタンス名を指定せずに、カウンタを取得
+
    For Each pc As PerformanceCounter In categorySystem.GetCounters()
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10}", _
+
                        pc.CategoryName, _
+
                        pc.CounterName, _
+
                        pc.InstanceName)
+
    Next
+

          
+
    Console.WriteLine()
+

          
+
    ' カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    Dim categoryProcessor As New PerformanceCounterCategory("Processor")
+

          
+
    ' インスタンス名"_Total"に対応するカウンタを取得
+
    For Each pc As PerformanceCounter In categoryProcessor.GetCounters("_Total")
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10}", _
+
                        pc.CategoryName, _
+
                        pc.CounterName, _
+
                        pc.InstanceName)
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
System          File Read Operations/sec           
+
System          File Write Operations/sec           
+
System          File Control Operations/sec           
+
System          File Read Bytes/sec            
+
System          File Write Bytes/sec           
+
System          File Control Bytes/sec           
+
System          Context Switches/sec           
+
System          System Calls/sec               
+
System          File Data Operations/sec           
+
System          System Up Time                 
+
System          Processor Queue Length           
+
System          Processes                      
+
System          Threads                        
+
System          Alignment Fixups/sec           
+
System          Exception Dispatches/sec           
+
System          Floating Emulations/sec           
+
System          % Registry Quota In Use           
+

          
+
Processor       % Processor Time     _Total    
+
Processor       % User Time          _Total    
+
Processor       % Privileged Time    _Total    
+
Processor       Interrupts/sec       _Total    
+
Processor       % DPC Time           _Total    
+
Processor       % Interrupt Time     _Total    
+
Processor       DPCs Queued/sec      _Total    
+
Processor       DPC Rate             _Total    
+
Processor       % Idle Time          _Total    
+
Processor       % C1 Time            _Total    
+
Processor       % C2 Time            _Total    
+
Processor       % C3 Time            _Total    
+
Processor       C1 Transitions/sec   _Total    
+
Processor       C2 Transitions/sec   _Total    
+
Processor       C3 Transitions/sec   _Total    
+
}}
+

          
+
カテゴリ名の場合と同様、既知のカウンタが存在するかどうかを調べるために&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.CounterExists){CounterExistsメソッド};を使うことができます。
+

          
+
*インスタンス名の列挙
+
特定のカテゴリで計測できる対象のインスタンス名を取得するには、&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.GetInstanceNames){GetInstanceNamesメソッド};を使います。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    var category = new PerformanceCounterCategory("Processor");
+

          
+
    // カテゴリで計測できる対象のインスタンス名を列挙
+
    foreach (var instanceName in category.GetInstanceNames()) {
+
      Console.WriteLine(instanceName);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' カテゴリ名"Processor"のPerformanceCounterCategoryインスタンスを作成
+
    Dim category As New PerformanceCounterCategory("Processor")
+

          
+
    ' カテゴリで計測できる対象のインスタンス名を列挙
+
    For Each instanceName As String In category.GetInstanceNames()
+
      Console.WriteLine(instanceName)
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
_Total
+
0
+
1
+
}}
+

          
+
カテゴリ名の場合と同様、既知のインスタンスが存在するかどうかを調べるために&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.InstanceExists){InstanceExistsメソッド};を使うことができます。
+

          
+
*&aname(AllCategories){カテゴリの一覧};
+
&msdn(netfx,member,System.Diagnostics.PerformanceCounterCategory.GetCategories){GetCategoriesメソッド};で取得したパフォーマンスカウンタのCategoryNameとCategoryType、CategoryHelpの一覧です。
+

          
+
**Windows 7 Ultimate
+
|CategoryName|CategoryType|CategoryHelp|h
+
|.NET CLR Data|MultiInstance|.Net CLR データです。|
+
|.NET CLR Networking|MultiInstance|ヘルプは使用できません。|
+
|.NET CLR Networking 4.0.0.0|MultiInstance|System.Net 名前空間のクラスのカウンタです。|
+
|.NET Data Provider for Oracle|MultiInstance|System.Data.OracleClient のカウンタです。|
+
|.NET Data Provider for SqlServer|MultiInstance|System.Data.SqlClient のカウンタです。|
+
|.NET Memory Cache 4.0|MultiInstance|System.Runtime.Caching.MemoryCache Performance Counters|
+
|ASP.NET|SingleInstance|ASP.NET グローバル パーフォーマンス カウンター|
+
|ASP.NET Applications|MultiInstance|ASP.NET アプリケーション パーフォーマンス カウンター|
+
|ASP.NET Apps v4.0.30319|MultiInstance|ASP.NET アプリケーション パーフォーマンス カウンター|
+
|ASP.NET State Service|SingleInstance|ASP.NET 状態サービス|
+
|ASP.NET v4.0.30319|SingleInstance|ASP.NET グローバル パーフォーマンス カウンター|
+
|Browser|SingleInstance|Browser パフォーマンス オブジェクトには、通知、列挙および Browser 伝送の率を計測するカウンターがあります。|
+
|Cache|SingleInstance|Cache パフォーマンス オブジェクトには、ディスクから読み取る必要なしにデータへのアクセス許可がある限り使用されているデータを保管する物理メモリの領域である、ファイル システム キャッシュを監視するカウンターがあります。キャッシュは、通常アプリケーションに使用されるため、アプリケーションの I/O 操作のインジケーターとして監視されます。メモリが十分にある場合にはキャッシュのサイズは大きくなりますが、メモリが少ない場合にはキャッシュのサイズも小さくなり効果的でなくなります。|
+
|Client Side Caching|SingleInstance|帯域幅消費を削減する SMB BranchCache のパフォーマンス カウンター|
+
|Distributed Transaction Coordinator|SingleInstance|Microsoft 分散トランザクション コーディネーター パフォーマンス カウンター|
+
|Event Tracing for Windows|SingleInstance|このコレクションのカウンターは、Windows イベント トレーシング サブシステムのパフォーマンスについて、システム全体のメトリックを示します。|
+
|Event Tracing for Windows Session|MultiInstance|このコレクションのカウンターは、個々の Windows イベント トレーシング セッションに関連しています。|
+
|HTTP Service|SingleInstance|HTTP サービス カウンターのセット|
+
|HTTP Service Request Queues|MultiInstance|要求キュー カウンターのセット|
+
|HTTP Service Url Groups|MultiInstance|URL グループ固有カウンターのセット|
+
|ICMP|SingleInstance|ICMP オブジェクト タイプには、ICMP プロトコルを使用しているシステムによって送受信された ICMP メッセージの数を示すカウンターがあります。ICMP プロトコルに関する各種のエラー数もこのタイプのカウンターでカウントされます。|
+
|ICMPv6|SingleInstance|ICMP オブジェクト タイプには、ICMP プロトコルを使用しているシステムによって送受信された ICMP メッセージの数を示すカウンターがあります。ICMP プロトコルに関する各種のエラー数もこのタイプのカウンターでカウントされます。|
+
|IPHTTPS Global|MultiInstance|このコンピューターでの IPHTTPS サーバーの統計です。|
+
|IPsec Driver|SingleInstance|IPsec Driver は、インターネット プロトコル バージョン 4 とインターネット プロトコル バージョン 6 を介したトラフィックに適用されるインターネット プロトコル セキュリティ (IPsec) ドライバー カウンターのセットです。|
+
|IPv4|SingleInstance|IP パフォーマンス オブジェクトには、IP プロトコルを使用して送受信される IP データグラムの速度を計測するカウンターがあります。IP プロトコルのエラーを監視するカウンターがあります。|
+
|IPv6|SingleInstance|IP パフォーマンス オブジェクトには、IP プロトコルを使用して送受信される IP データグラムの速度を計測するカウンターがあります。IP プロトコルのエラーを監視するカウンターがあります。|
+
|Job Object|MultiInstance|アクティブに名前を付けられたジョブ オブジェクトによって収集されたアカウンティングおよびプロセッサの使用データのレポートです。|
+
|Job Object Details|MultiInstance|ジョブ オブジェクトを作成するアクティブなプロセスについての詳細なパフォーマンス情報を表示します。|
+
|LogicalDisk|MultiInstance|Logical Disk パフォーマンス オブジェクトには、ハード ディスクまたは固定ディスク ドライブの論理パーティションを監視するカウンターがあります。パフォーマンス モニターは、論理ディスクを C などのドライブ文字で認識します。|
+
|Memory|SingleInstance|Memory パフォーマンス オブジェクトには、物理メモリおよび仮想メモリの動作を表示するカウンターがあります。物理メモリはランダム アクセス メモリの領域です。仮想メモリは物理メモリ内とディスク上の領域からなります。メモリのカウンターの多くは、ページング (ディスクと物理メモリの間で起こるコードとデータのページ移動) を監視します。過度なページングによるメモリ不足は、システム処理の遅延の原因となります。|
+
|MSDTC Bridge 3.0.0.0|SingleInstance|MSDTC Bridge 3.0.0.0 パフォーマンス カウンタ|
+
|MSDTC Bridge 4.0.0.0|SingleInstance|MSDTC Bridge 4.0.0.0 パフォーマンス カウンター|
+
|NBT Connection|MultiInstance|NBT 接続パフォーマンス オブジェクトには、ローカル コンピューターとリモート コンピューター間の NBT 接続に送受信されるバイトの速度を計測するカウンターがあります。接続は、リモート コンピューターの名前によって認識されます。|
+
|Network Inspection System|SingleInstance|Network Inspection System service performance counters|
+
|Network Interface|MultiInstance|Network Interface パフォーマンス オブジェクトには、TCP/IP ネットワーク接続で送受信されるバイトとパケットの率を計測するカウンターがあります。接続エラーを監視するカウンターも含まれます。|
+
|Objects|SingleInstance|Object パフォーマンス オブジェクトには、プロセス、スレッド、ミューテックスおよびセマフォなどのシステムの論理オブジェクトを監視するカウンターがあります。このカウンターの情報によって、不必要なリソースの消費を検出できます。 各オブジェクトは、オブジェクトの基本情報を格納するメモリが必要です。|
+
|Offline Files|SingleInstance|オフライン ファイルのパフォーマンス カウンター|
+
|Pacer Pipe|MultiInstance|Pacer Pipe のパフォーマンス カウンター セットは、パケット スケジューラからのパイプ統計で構成されます。|
+
|Paging File|MultiInstance|Paging File パフォーマンス オブジェクトには、ページング ファイルを監視するカウンターがあります。ページング ファイルは、コミットされた物理メモリをバックアップするディスクで予約された領域です。|
+
|Per Processor Network Activity Cycles|MultiInstance|Per Processor Network Activity Cycles カウンター セットは、各プロセッサにおけるインターフェイスのネットワーク活動に伴うプロセッサ サイクルを計測します。|
+
|Per Processor Network Interface Card Activity|MultiInstance|Per Processor Network Interface Card Activity カウンター セットは、プロセッサごとにネットワーク インターフェイスのネットワーク活動を計測します。|
+
|PhysicalDisk|MultiInstance|Physical Disk パフォーマンス オブジェクトには、ハード ディスクまたは固定ディスク ドライブを監視するカウンターがあります。ディスクは、ファイル、プログラム、ページング データの格納に使用され、これらを取り出すために読み取られたり、変更を記録するために書き込まれたりします。物理ディスク カウンターの値は、分割された論理ディスク (またはパーティション) の合計値となります。|
+
|Print Queue|MultiInstance|印刷キューに関するパフォーマンス統計情報を表示します。|
+
|Process|MultiInstance|Process パフォーマンス オブジェクトには、実行中のプログラムとシステム処理を監視するカウンターがあります。プロセス内のすべてのスレッドは同じアドレス領域を共有し、同じデータへアクセスします。|
+
|Processor|MultiInstance|Processor パフォーマンス オブジェクトには、プロセッサの処理状況のアスペクトを計測するカウンターがあります。プロセッサは、算術および論理計算の実行、周辺機器の操作の初期化、プロセスのスレッドの実行を行うコンピューターの一部です。コンピューターには複数のプロセッサを実装可能です。プロセッサ オブジェクトは、各プロセッサをオブジェクトのインスタンスとして表します。|
+
|Processor Information|MultiInstance|プロセッサ情報パフォーマンス カウンター セットには、プロセッサの処理状況のアスペクトを計測するカウンターがあります。プロセッサは、算術および論理計算の実行、周辺機器の操作の初期化、プロセスのスレッドの実行を行うコンピューターの一部です。コンピューターには複数のプロセッサが存在します。プロセッサ情報カウンター セットは、各プロセッサをカウンター セットのインスタンスとして表します。|
+
|RAS Port|MultiInstance|RAS オブジェクトの種類は、お使いのシステムの RAS デバイスの各ポートを処理します。|
+
|RAS Total|SingleInstance|RAS オブジェクトの種類は、お使いのシステムの RAS デバイスのすべてを統合したポートを処理します。|
+
|ReadyBoost Cache|SingleInstance|ReadyBoost キャッシュに関するパフォーマンス統計情報を表示します。|
+
|Redirector|SingleInstance|Redirector パフォーマンス オブジェクトには、ローカル コンピューターから発信されるネットワーク接続を監視するカウンターがあります。|
+
|Server|SingleInstance|Server パフォーマンス オブジェクトには、ローカル コンピューターとネットワーク間の通信を計測するカウンターがあります。|
+
|Server Work Queues|MultiInstance|Server Work Queues パフォーマンス オブジェクトには、キューの長さおよびキュー内のオブジェクトを監視するカウンターがあります。|
+
|ServiceModelEndpoint 3.0.0.0|MultiInstance|ServiceModelEndpoint 3.0.0.0 パフォーマンス カウンタ|
+
|ServiceModelOperation 3.0.0.0|MultiInstance|ServiceModelOperation 3.0.0.0 パフォーマンス カウンタ|
+
|ServiceModelService 3.0.0.0|MultiInstance|ServiceModelService 3.0.0.0 パフォーマンス カウンタ|
+
|SMSvcHost 3.0.0.0|SingleInstance|SMSvcHost 3.0.0.0 パフォーマンス カウンタ|
+
|SMSvcHost 4.0.0.0|SingleInstance|SMSvcHost 4.0.0.0 パフォーマンス カウンター|
+
|Synchronization|MultiInstance|カーネル同期のためのカウンターで構成されます。同期オブジェクトは、各プロセッサをオブジェクトのインスタンスとして表します。|
+
|System|SingleInstance|System パフォーマンス オブジェクトには、コンポーネント プロセッサの複数のインスタンスに適用されるカウンターがあります。|
+
|TCPv4|SingleInstance|TCP パフォーマンス オブジェクトでは、TCP プロトコルを使用して送受信される TCP セグメントの率を計測するカウンターがあります。各 TCP 接続状態における TCP 接続数を監視するカウンターも含まれます。|
+
|TCPv6|SingleInstance|TCP パフォーマンス オブジェクトでは、TCP プロトコルを使用して送受信される TCP セグメントの率を計測するカウンターがあります。各 TCP 接続状態における TCP 接続数を監視するカウンターも含まれます。|
+
|Telephony|SingleInstance|テレフォニー システムです。|
+
|Teredo Client|MultiInstance|Teredo クライアントの統計です。|
+
|Teredo Relay|MultiInstance|このコンピューター上でホストされている Teredo リレーの統計です。|
+
|Teredo Server|MultiInstance|このコンピューターでホストされている Teredo サーバーの統計です。|
+
|Terminal Services|SingleInstance|ターミナル サービス要約情報|
+
|Terminal Services Session|MultiInstance|ターミナル サービス各セッションのリソース モニターです。|
+
|Thread|MultiInstance|Thread パフォーマンス オブジェクトには、スレッド動作のアスペクトを計測するカウンターがあります。スレッドはプロセッサ上で命令を実行する基本オブジェクトです。実行中のすべてのプロセスには、少なくとも 1 つのスレッドがあります。|
+
|UDPv4|SingleInstance|UDP パフォーマンス オブジェクトには、UDP プロトコルを使用して送受信される UDP データグラムの速度を計測するカウンターがあります。UDP プロトコル エラーを監視するカウンターがあります。|
+
|UDPv6|SingleInstance|UDP パフォーマンス オブジェクトには、UDP プロトコルを使用して送受信される UDP データグラムの速度を計測するカウンターがあります。UDP プロトコル エラーを監視するカウンターがあります。|
+
|USB|MultiInstance|USB I/O カウンター|
+
|WF (System.Workflow) 4.0.0.0|MultiInstance|Windows Workflow Foundation パフォーマンス カウンター|
+
|WFP|SingleInstance|WFP は、特定のインターネット プロトコル バージョンに適用しない Windows Filtering Platform カウンターのセットです。|
+
|WFPv4|SingleInstance|WFPv4 は、インターネット プロトコル バージョン 4 を介したトラフィックと接続に適用される Windows Filtering Platform カウンターのセットです。|
+
|WFPv6|SingleInstance|WFPv6 は、インターネット プロトコル バージョン 6 を介したトラフィックと接続に適用される Windows フィルタリング プラットフォーム カウンターのセットです。|
+
|Windows Workflow Foundation|MultiInstance|Windows Workflow Foundation パフォーマンス カウンタ|
+
|CategoryName|CategoryType|CategoryHelp|f
+

          
+
**Ubuntu 11.04 (Mono 2.10)
+
|CategoryName|CategoryType|CategoryHelp|h
+
|.NET CLR Exceptions|Unknown||
+
|.NET CLR Interop|Unknown||
+
|.NET CLR JIT|Unknown||
+
|.NET CLR Loading|Unknown||
+
|.NET CLR LocksAndThreads|Unknown||
+
|.NET CLR Memory|Unknown||
+
|.NET CLR Remoting|Unknown||
+
|.NET CLR Security|Unknown||
+
|ASP.NET|Unknown||
+
|Mono Memory|Unknown||
+
|Mono Threadpool|Unknown||
+
|Network Interface|Unknown||
+
|Process|Unknown||
+
|Processor|Unknown||
+
|CategoryName|CategoryType|CategoryHelp|f
+

          
+
#navi(..)
+

          
+

          

programming/netfx/performancecounter/index.wiki.txt

current previous
1,13 0,0
+
${smdncms:title,パフォーマンスカウンタ}
+
${smdncms:header_title,パフォーマンスカウンタ (System.Diagnostics.PerformanceCounter)}
+
${smdncms:keywords,System.Diagnostics,PerformanceCounter,パフォーマンスカウンタ}
+

          
+
Windowsでは管理ツールにシステムのパフォーマンスを計測・収集するツールとしてパフォーマンスモニタ(perfmon.exe)が用意されていますが、.NET Frameworkの&msdn(netfx,type,System.Diagnostics.PerformanceCounter){System.Diagnostics.PerformanceCounterクラス};を使うことにより、CPU使用率やメモリの使用状況など、システムやプロセス・スレッドのパフォーマンス情報をコード上で収集することができるようになります。
+

          
+
ここではPerformanceCounterクラスの使い方と、パフォーマンス情報の収集の仕方について解説します。
+

          
+
-ページ一覧
+
#ls2_1(noroot,pathsort)
+

          
+
注意:Windows 9x系では、PerformanceCounterを使ったデータの収集はサポートされていません。 Monoでは、カテゴリ・カウンタの種類やプラットフォームによってはサポートされていない、もしくは未実装のものがあるようです。
+

          

programming/netfx/performancecounter/0_counter/index.wiki.txt

current previous
1,545 0,0
+
${smdncms:title,パフォーマンス情報の計測}
+
${smdncms:header_title,パフォーマンス情報の計測 (PerformanceCounter)}
+
${smdncms:keywords,CPU,プロセッサ,使用率}
+
${smdncms:document_versions,codelang=cs,codelang=vb}
+

          
+
#navi(..)
+

          
+
ここでは&msdn(netfx,type,System.Diagnostics.PerformanceCounter){PerformanceCounterクラス};の使い方について見ていきます。 PerformanceCounterクラスを使うことで、パフォーマンスモニタ(perfmon.exe)で計測できるパフォーマンス情報をコード上で取得することができます。
+

          
+
#googleadunit(banner)
+

          
+
*PerformanceCounterクラス
+
**パフォーマンス情報の計測
+
まずはPerformanceCounterクラスを使った簡単な例として、CPU使用率の測定を行ってみます。 次の例では、1秒ごとにCPU使用率を取得し、表示しています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+
using System.Threading;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // カテゴリ名・カウンタ名・インスタンス名を指定してPerformanceCounterのインスタンスを作成
+
    var pc = new PerformanceCounter("Processor", "% Processor Time", "_Total");
+

          
+
    for (;;) {
+
      // カウンタの値を取得して、値を0.0~1.0の範囲にする
+
      var percent = pc.NextValue() / 100.0f;
+

          
+
      // パーセント値として表示
+
      Console.WriteLine("{0,8:P2}", percent);
+

          
+
      Thread.Sleep(1000);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+
Imports System.Threading
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' カテゴリ名・カウンタ名・インスタンス名を指定してPerformanceCounterのインスタンスを作成
+
    Dim pc As New PerformanceCounter("Processor", "% Processor Time", "_Total")
+

          
+
    Do
+
      ' カウンタの値を取得して、値を0.0~1.0の範囲にする
+
      Dim usage As Single = pc.NextValue() / 100.0
+

          
+
      ' パーセント値として表示
+
      Console.WriteLine("{0,8:P2}", usage)
+

          
+
      Thread.Sleep(1000)
+
    Loop
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
   0.00%
+
  13.72%
+
   8.53%
+
  10.68%
+
   0.88%
+
   4.69%
+
   7.03%
+
  24.06%
+
  17.97%
+
  10.68%
+
  11.80%
+
^C
+
}}
+

          
+
実行すると上記のような結果が得られます。 システムモニタのグラフと合わせて確認すると、結果が比較しやすいと思います。
+

          
+
上記のコードを簡単に解説すると、まずPerformanceCounterのインスタンス作成のところで、コンストラクタに計測する値のカテゴリ名・カウンタ名・インスタンス名を指定しています。 具体的には追って説明しますが、この部分を変えることで様々な値を計測することができます。 この例では、カテゴリ名が"Processor"でプロセッサ(CPU)、カウンタ名が"% Processor Time"でプロセッサ時間(%)、インスタンス名が"_Total"で全CPUの合計時間を計測するPerformanceCounterを作成していることになります。
+

          
+
計測した値を取得するためのメソッドが&msdn(netfx,member,System.Diagnostics.PerformanceCounter.NextValue){NextValue};です。 CPU使用率の場合は戻り値は0.0から100.0までの値となりますが、計測する値の種類によって異なります。 この例では0.0から1.0までの値にスケーリングしなおしてから表示しています。
+

          
+
なお、実行結果では一番はじめの計測値が0.00%となっているのは、NextValueメソッドが「現在の値と以前の値の差を計測間隔時間で割ったもの」を算出結果として返すためです。 そのため、最初の呼び出しでは計算に使うための値がないため、0が返されます。 NextValueメソッドの戻り値の意味はカウンタが計測する値の種類によって変わりますが、[[CounterTypeプロパティ>#CounterType]]を参照することでカウンタの値の種類を知ることができます。
+

          
+
また、リファレンスによると、NextValueメソッドの呼び出しは1秒間隔で行うことが推奨されています。 これより短い間隔で更新した場合は、値が更新されない可能性があります。 最初のNextValueの呼び出しの際、環境によっては結果が得られるまでに時間がかかる場合もあるようです。
+

          
+
**フォームデザイナでの配置
+
PerformanceCounterはフォームデザイナからフォーム上に配置できるコンポーネントになっています。 配置する場合は、ツールボックスの「コンポーネント」から「PerformanceCounter」を選択します。 なお、PerformanceCounterはGUIを持たないので、配置してもフォーム上には現れません。
+
#image(pc1.png,60%,ツールボックス中のPerformanceCounter)
+
次に、CategoryName、CounterName、InstanceName等のプロパティ値を指定します。 まず、CategoryNameの一覧からどれか一つ選択すると、そのカテゴリに含まれる計測値がCounterNameの一覧に表示されます。 この中から計測したい値を選択します。 さらに、必要に応じてInstanceNameも選択します。
+
#image(pc2.png,60%,PerformanceCounterのプロパティの設定)
+
あとは、NextValueメソッドを呼び出し、結果を表示するようにするなど、必要なコードを記述します。 呼び出し方は、すでに説明した例の場合と同様です。
+
#image(pc3.png,60%,実行結果)
+

          
+
*カテゴリ・カウンタ名・インスタンス名
+
カテゴリ名・カウンタ名・インスタンス名にそれぞれ適切な値を指定することで、様々な値を計測することができるようになります。
+

          
+
**CategoryName, CounterName, InstanceName
+
先の例ではコンストラクタでカテゴリ名等を指定していますが、指定した値はプロパティで参照でき、また設定をすることもできます。 それぞれ対応するプロパティは&msdn(netfx,member,System.Diagnostics.PerformanceCounter.CategoryName){CategoryName};、&msdn(netfx,member,System.Diagnostics.PerformanceCounter.CounterName){CounterName};、&msdn(netfx,member,System.Diagnostics.PerformanceCounter.InstanceName){InstanceName};で、次の例のようにコンストラクタに何も指定せずインスタンスを作成し、後からカテゴリ等のプロパティを個別に設定することもできます。 次の例は、先のコードと同じ動作となります。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+
using System.Threading;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // PerformanceCounterのインスタンスを作成
+
    var pc = new PerformanceCounter();
+

          
+
    pc.CategoryName = "Processor"; // カテゴリ名
+
    pc.CounterName  = "% Processor Time"; // カウンタ名
+
    pc.InstanceName = "_Total"; // インスタンス名
+

          
+
    // 以下略
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+
Imports System.Threading
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' PerformanceCounterのインスタンスを作成
+
    Dim pc As New PerformanceCounter()
+

          
+
    pc.CategoryName = "Processor" ' カテゴリ名
+
    pc.CounterName  = "% Processor Time" ' カウンタ名
+
    pc.InstanceName = "_Total" ' インスタンス名
+

          
+
    ' 以下略
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
**InstanceNameの例:CPUコア毎の使用率の取得
+
インスタンス名(InstanceName)は、カテゴリ・カウンタの種類は同じでも、特定の対象を指定して値を計測したい場合に指定します。 例えば、マルチコアCPUを使用している環境の場合は、プロセッサそれぞれの使用率を取得することができます。 この場合、インスタンス名には"_Total"ではなくプロセッサのインデックス、つまり"0"や"1"などを指定することでプロセッサそれぞれの使用率を取得することができます。
+

          
+
次の例では&msdn(netfx,member,System.Environment.ProcessorCount){Environment.ProcessorCount};を参照してプロセッサ数を取得し、それぞれのプロセッサ毎の使用率を計測するPerformanceCounterを作成して、値を計測しています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+
using System.Threading;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // プロセッサ数分のPerformanceCounterを格納する配列
+
    var pcs = new PerformanceCounter[Environment.ProcessorCount];
+

          
+
    for (var index = 0; index < pcs.Length; index++) {
+
      // プロセッサ毎の使用率を計測するPerformanceCounterを作成
+
      pcs[index] = new PerformanceCounter("Processor", "% Processor Time", index.ToString());
+
    }
+

          
+
    for (;;) {
+
      foreach (var pc in pcs) {
+
        Console.Write("{0,8:P2} ", pc.NextValue() / 100.0f);
+
      }
+

          
+
      Console.WriteLine();
+

          
+
      Thread.Sleep(1000);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+
Imports System.Threading
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' プロセッサ数分のPerformanceCounterを格納する配列
+
    Dim pcs As PerformanceCounter() = New PerformanceCounter(Environment.ProcessorCount - 1) {}
+

          
+
    For index As Integer = 0 To pcs.Length - 1
+
      ' プロセッサ毎の使用率を計測するPerformanceCounterを作成
+
      pcs(index) = New PerformanceCounter("Processor", "% Processor Time", index.ToString())
+
    Next
+

          
+
    Do
+
      For Each pc As PerformanceCounter In pcs
+
        Console.Write("{0,8:P2} ", pc.NextValue() / 100.0)
+
      Next
+

          
+
      Console.WriteLine()
+

          
+
      Thread.Sleep(1000)
+
    Loop
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
   0.00%    0.00%
+
  29.89%   22.56%
+
  24.03%   22.63%
+
  53.58%   35.38%
+
  21.61%   22.03%
+
   3.22%    6.52%
+
  33.01%   12.59%
+
   1.66%    4.78%
+
  17.27%    4.00%
+
  60.38%   31.85%
+
  55.08%    8.66%
+
  49.81%   25.44%
+
  61.17%   28.45%
+
^C
+
}}
+

          
+
**CounterNameの例:ユーザモード・特権モードの使用率・アイドル率の取得
+
カウンタ名(CounterName)では、計測する値の種類を指定します。 例えばカテゴリがCPU情報("Processor")の場合は、ユーザモード・特権モードの使用率・アイドル率などを計測することができます。 次の例では、それぞれの使用率を取得するPerformanceCounterを作成し、値を計測しています。 また、100%からアイドル率を差し引くことで全体の使用率も求めています。
+

          
+
この例ではインスタンス名(InstanceName)に"_Total"を指定していますが、既に解説したとおり、"0"や"1"などを指定することでプロセッサ毎に計測することもできます。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+
using System.Threading;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    var pcCpuPriv = new PerformanceCounter("Processor", "% Privileged Time", "_Total"); // 特権モードの使用率
+
    var pcCpuUser = new PerformanceCounter("Processor", "% User Time", "_Total"); // ユーザモードの使用率
+
    var pcCpuIdle = new PerformanceCounter("Processor", "% Idle Time", "_Total"); // アイドル率
+

          
+
    Console.WriteLine("  Priv[%]  User[%]  Idle[%] Total[%]");
+

          
+
    for (;;) {
+
      var usagePriv = pcCpuPriv.NextValue() / 100.0;
+
      var usageUser = pcCpuUser.NextValue() / 100.0;
+
      var usageIdle = pcCpuIdle.NextValue() / 100.0;
+

          
+
      Console.WriteLine("{0,8:P2} {1,8:P2} {2,8:P2} {3,8:P2}",
+
                        usagePriv,
+
                        usageUser,
+
                        usageIdle,
+
                        1.0f - usageIdle);
+

          
+
      Thread.Sleep(1000);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+
Imports System.Threading
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    Dim pcCpuPriv As New PerformanceCounter("Processor", "% Privileged Time", "_Total") ' 特権モードの使用率
+
    Dim pcCpuUser As New PerformanceCounter("Processor", "% User Time", "_Total") ' ユーザモードの使用率
+
    Dim pcCpuIdle As New PerformanceCounter("Processor", "% Idle Time", "_Total") ' アイドル率
+

          
+
    Console.WriteLine("  Priv[%]  User[%]  Idle[%] Total[%]")
+

          
+
    Do
+
      Dim usagePriv As Single = pcCpuPriv.NextValue() / 100.0
+
      Dim usageUser As Single = pcCpuUser.NextValue() / 100.0
+
      Dim usageIdle As Single = pcCpuIdle.NextValue() / 100.0
+

          
+
      Console.WriteLine("{0,8:P2} {1,8:P2} {2,8:P2} {3,8:P2}", _
+
                        usagePriv, _
+
                        usageUser, _
+
                        usageIdle, _
+
                        1.0 - usageIdle)
+

          
+
      Thread.Sleep(1000)
+
    Loop
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
  Priv[%]  User[%]  Idle[%] Total[%]
+
   0.00%    0.00%    0.00%  100.00%
+
   1.56%    0.00%   98.34%    1.66%
+
   1.56%    0.78%   98.55%    1.45%
+
   0.78%    0.00%   99.03%    0.97%
+
   2.34%    0.78%   96.88%    3.13%
+
   3.90%    1.56%   94.35%    5.65%
+
   3.12%    0.78%   95.63%    4.37%
+
   5.45%    0.78%   93.75%    6.25%
+
   3.12%    1.56%   95.22%    4.78%
+
   0.00%    0.78%   99.12%    0.88%
+
   2.34%    0.78%   96.69%    3.31%
+
   3.12%    0.78%   96.00%    4.00%
+
^C
+
}}
+

          
+
**CategoryNameの例・CPU以外のパフォーマンス情報の収集
+
カテゴリ名(CategoryName)を変えることで、CPU情報("Processor"カテゴリ)以外にも、様々なパフォーマンス情報の収集を行うことができます。 次の例では、システムの全プロセス数、使用可能なメモリ、ディスクからの秒間読み込みバイト数を計測・表示しています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+
using System.Threading;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    // システムの全プロセス数
+
    var pcProcesses = new PerformanceCounter("System", "Processes", string.Empty);
+
    // 使用可能なメモリ (MBytes)
+
    var pcMemoryAvailable = new PerformanceCounter("Memory", "Available MBytes", string.Empty);
+
    // Cドライブからの秒間読み込みバイト数
+
    var pcDiskReadBps = new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:");
+

          
+
    for (;;) {
+
      Console.WriteLine("{0,8} {1,8}[MB] {2,8}[Bytes/sec]",
+
                        pcProcesses.NextValue(),
+
                        pcMemoryAvailable.NextValue(),
+
                        pcDiskReadBps.NextValue());
+

          
+
      Thread.Sleep(1000);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+
Imports System.Threading
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    ' システムの全プロセス数
+
    Dim pcProcesses As New PerformanceCounter("System", "Processes", String.Empty)
+
    ' 使用可能なメモリ (MBytes)
+
    Dim pcMemoryAvailable As New PerformanceCounter("Memory", "Available MBytes", String.Empty)
+
    ' Cドライブからの秒間読み込みバイト数
+
    Dim pcDiskReadBps As New PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:")
+

          
+
    Do
+
      Console.WriteLine("{0,8} {1,8}[MB] {2,8}[Bytes/sec]", _
+
                        pcProcesses.NextValue(), _
+
                        pcMemoryAvailable.NextValue(), _
+
                        pcDiskReadBps.NextValue())
+

          
+
      Thread.Sleep(1000)
+
    Loop
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
      67     2557[MB]        0[Bytes/sec]
+
      67     2554[MB]  1113750[Bytes/sec]
+
      67     2553[MB] 829922.4[Bytes/sec]
+
      67     2552[MB] 417267.6[Bytes/sec]
+
      67     2551[MB] 623574.4[Bytes/sec]
+
      67     2551[MB] 493810.3[Bytes/sec]
+
      67     2550[MB] 490272.9[Bytes/sec]
+
      67     2551[MB] 461774.7[Bytes/sec]
+
      67     2550[MB] 692728.8[Bytes/sec]
+
      67     2551[MB] 391742.1[Bytes/sec]
+
      67     2550[MB] 380394.1[Bytes/sec]
+
      64     2553[MB] 539733.5[Bytes/sec]
+
      64     2553[MB] 519753.1[Bytes/sec]
+
      64     2554[MB]   730525[Bytes/sec]
+
^C
+
}}
+

          
+
CPU使用率の場合では、NextValueメソッドからパーセント値が返されますが、この例のようにカウンタの種類に応じて返される値の単位が変わるため、表示する場合などは適宜対応する必要があります。 値の単位や種類については[[CounterType>#CounterType]]で解説します。
+

          
+
**CategoryName, CounterName, InstanceNameに指定できる値
+
パフォーマンスカウンタで計測できる値は、プロセス数や空きメモリなどどの環境でも共通して計測できるもののほか、ドライブ毎のディスクIOなどマシンによって計測できる対象が変わるものがあります。 そのため、カテゴリ名・カウンタ名・インスタンス名に指定できる値は、環境によって変わってきます。
+
具体的にどの値が指定できるかどうかを調べるには、パフォーマンスモニタ(perfmon.exe)を使う他にも、コード上からはPerformanceCounterCategoryクラスのメンバを使うことができます。 詳しくは[[programming/netfx/performancecounter/1_categories]]で解説します。
+

          
+
*&aname(CounterType){計測値の種類 (CounterType)};
+
カウンタが計測する値の種類を調べるには、&msdn(netfx,member,System.Diagnostics.PerformanceCounter.CounterType){CounterTypeプロパティ};を参照します。 このプロパティは&msdn(netfx,type,System.Diagnostics.PerformanceCounterType){PerformanceCounterType列挙体};の値となっていて、計測される生データの種類とNextValueの戻り値の算出方法を表すものです。 このプロパティから、NextValueメソッドが現在の値と以前の値の差を元にした値を返すのか、NextValueメソッドを呼び出した時点の計測値が返されるのかなどを知ることができます。
+

          
+
PerformanceCounterTypeの代表的なものとして以下のようなものがあります。 なお、生データから計算される値が整数値となる場合でも、NextValueメソッドでは浮動小数点型に変換された値が返されます。
+

          
+
|CounterTypeの値|計測値とNextValueの戻り値|h
+
|{{
+
Timer100Ns
+
Timer100NsInverse
+
}}|直前の呼び出し時との計測値の差を基に求めた、100%に対する割合。 パーセント値(0~100)。|
+
|{{
+
CountPerTimeInterval32
+
CountPerTimeInterval64
+
RateOfCountsPerSecond32
+
RateOfCountsPerSecond64
+
}}|直前の呼び出し時との計測値の差を基に求めた、単位時間あたりの量。 実数値。|
+
|{{
+
CounterDelta32
+
CounterDelta64
+
}}|直前の呼び出し時との計測値の差。 整数値または実数値。|
+
|{{
+
NumberOfItems32
+
NumberOfItems64
+
NumberOfItemsHEX32
+
NumberOfItemsHEX64
+
}}|呼び出しを行った時点での計測値。 整数値。|
+

          
+
次の例では、いくつかのカウンタを作成し、それぞれのCounterTypeを表示しています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    foreach (var pc in new[] {
+
      new PerformanceCounter("Processor", "% Processor Time", "_Total"),
+
      new PerformanceCounter("System", "Processes", string.Empty),
+
      new PerformanceCounter("Memory", "Available MBytes", string.Empty),
+
      new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:"),
+
    }) {
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10} : {3}",
+
                        pc.CategoryName,
+
                        pc.CounterName,
+
                        pc.InstanceName,
+
                        pc.CounterType);
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    For Each pc As PerformanceCounter In New PerformanceCounter() { _
+
      New PerformanceCounter("Processor", "% Processor Time", "_Total"), _
+
      New PerformanceCounter("System", "Processes", String.Empty), _
+
      New PerformanceCounter("Memory", "Available MBytes", String.Empty), _
+
      New PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:") _
+
    }
+
      Console.WriteLine("{0,-15} {1,-20} {2,-10} : {3}", _
+
                        pc.CategoryName, _
+
                        pc.CounterName, _
+
                        pc.InstanceName, _
+
                        pc.CounterType)
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
Processor       % Processor Time     _Total     : Timer100NsInverse
+
System          Processes                       : NumberOfItems32
+
Memory          Available MBytes                : NumberOfItems64
+
PhysicalDisk    Disk Read Bytes/sec  0 C:       : RateOfCountsPerSecond64
+
}}
+

          
+
*&aname(CounterHelp){計測値の説明 (CounterHelp)};
+
&msdn(netfx,member,System.Diagnostics.PerformanceCounter.CounterHelp){CounterHelpプロパティ};を参照すると、パフォーマンスカウンタの計測値についての説明を取得することができます。
+

          
+
次の例では、先の例で使用したカウンタのCounterHelpプロパティを参照し、説明を表示しています。
+

          
+
#tabpage(C#)
+
#code(cs){{
+
using System;
+
using System.Diagnostics;
+

          
+
class Sample {
+
  public static void Main()
+
  {
+
    foreach (var pc in new[] {
+
      new PerformanceCounter("Processor", "% Processor Time", "_Total"),
+
      new PerformanceCounter("System", "Processes", string.Empty),
+
      new PerformanceCounter("Memory", "Available MBytes", string.Empty),
+
      new PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:"),
+
    }) {
+
      Console.WriteLine("[{0,-15} {1,-20} {2,-10}]",
+
                        pc.CategoryName,
+
                        pc.CounterName,
+
                        pc.InstanceName);
+
      Console.WriteLine(pc.CounterHelp);
+
      Console.WriteLine();
+
    }
+
  }
+
}
+
}}
+
#tabpage(VB)
+
#code(vb){{
+
Imports System
+
Imports System.Diagnostics
+

          
+
Class Sample
+
  Public Shared Sub Main()
+
    For Each pc As PerformanceCounter In New PerformanceCounter() { _
+
      New PerformanceCounter("Processor", "% Processor Time", "_Total"), _
+
      New PerformanceCounter("System", "Processes", String.Empty), _
+
      New PerformanceCounter("Memory", "Available MBytes", String.Empty), _
+
      New PerformanceCounter("PhysicalDisk", "Disk Read Bytes/sec", "0 C:") _
+
    }
+
      Console.WriteLine("[{0,-15} {1,-20} {2,-10}]", _
+
                        pc.CategoryName, _
+
                        pc.CounterName, _
+
                        pc.InstanceName)
+
      Console.WriteLine(pc.CounterHelp)
+
      Console.WriteLine()
+
    Next
+
  End Sub
+
End Class
+
}}
+
#tabpage-end
+

          
+
#prompt(実行結果){{
+
[Processor       % Processor Time     _Total    ]
+
% Processor Time は、プロセッサがアイドル以外のスレッドを実行するために使用した経過時間の割合をパーセントで表示します。プロセッサがアイドル スレッドの実行に使用する時間の割合を計測し、その値を 100% から引いて算出します (各プロセッサには、実行するスレッドが他にない場合にサイクルを消費するアイドル スレッドがあります)。このカウンターはプロセッサの処理状況を示す主な指標で、サンプリング間隔で計測されたビジー時間の平均割合をパーセントで表示します。プロセッサがアイドル状態かどうかの判断は、システム時計の内部サンプリング間隔 (10 ミリ秒) で実行されます。そのため、現在の高速プロセッサでは、システム時計のサンプリング間隔の間に、プロセッサがスレッド処理に多くの時間を費やしている可能性があり、% Processor Time でプロセッサ使用量が少なく見積もられる場合があります。処理負荷に基づくタイマー アプリケーションは、サンプルが取得された直後にタイマーが通知されるため正確に計測されない可能性の高いアプリケーションの一例です。
+

          
+
[System          Processes                      ]
+
データの収集時にコンピューター上にあるプロセス数です。この値はある時点でのカウントで、ある時間間隔での平均値ではありません。各プロセスは任意のプログラムの実行状態を表します。
+

          
+
[Memory          Available MBytes               ]
+
プロセスへの割り当て、またはシステムの使用にすぐに利用可能な物理メモリのサイズをメガバイト数で表示します。スタンバイ (キャッシュ済み)、空き、ゼロ ページの一覧に署名されたメモリの合計です。空きメモリは使用可能なメモリです。メモリ マネージャーについての詳細は、MSDN または『Windows Server 2003 リソース キット』の「システム パフォーマンスとトラブルシューティング ガイド」を参照してください。
+

          
+
[PhysicalDisk    Disk Read Bytes/sec  1 C:      ]
+
読み取り操作中にディスクからバイトが転送される速度です。
+
}}
+

          
+
#navi(..)
+