3

C# でプロセス コンテキスト スイッチのおおよその時間を測定する可能性はありますか? はいの場合、どのように?

この質問は、 Cracking the Coding Interview: 150 Programming Questions and Solutionsという本に基づいて作成しました。

彼らの解決策は次のとおりです。

P1 と P2 の 2 つのプロセスしかないとします。(これは大まかな概算です。より正確な概算があると思います)

P1 は実行中で、P2 は実行を待機しています。ある時点で、OS は P1 と P2 を交換する必要があります。これが P1 の N 番目の命令で発生すると仮定しましょう。したがって、この場合のコンテキスト切り替え時間は次のようになります。

Time_Stamp(P2_1) - TimeStamp(P2_N)

問題の 1 つは、プロセス内のすべての命令のタイムスタンプを記録できないことです。また、他のプロセス間のコンテキスト切り替えにかかる時間は考慮していません。

4

2 に答える 2

1

WMI (Windows Management Instrumentation) を使用できます。

例:

ManagementScope managementScope = new ManagementScope("\\\\.\\ROOT\\cimv2");
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Thread");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(managementScope, objectQuery);
ManagementObjectCollection objectCollection = searcher.Get();

foreach (ManagementObject m in objectCollection)
{
    Console.WriteLine("ContextSwitchesPersec : {0}", m["ContextSwitchesPersec"]);
}
于 2012-12-05T01:50:47.470 に答える
0

プロセス コンテキストの切り替えは OS によって行われ、.NET や C# とは関係ありません。

Windows パフォーマンス モニターを使用して 1 秒あたりのコンテキスト スイッチの量を監視できますが、プロセス自体はコンテキスト スイッチを認識しません。

Process Explorerを使用して、個々のプロセスのコンテキスト スイッチとデルタを監視することもできます。これらは既定では表示されませんが、[表示]、[列の選択]、[パフォーマンス] タブから追加できます。

于 2012-12-05T01:23:21.653 に答える