5

私たちのビジネス モデルでは、CPU 時間/使用量に基づいてユーザーに課金する必要があります。

StopWatch最初は単純に経過時間を測定単位として使用することを考えていました。

しかし、このアプローチの問題点は、5000 人のユーザーがサーバーにアクセスしている日中は、50 人のユーザーしかサーバーにアクセスしていない夜間よりも、同じコードの経過時間が長くなることです。

その他のオプションは、ユーザーが渡したデータに対して実行された反復に基づいてユーザーに課金することです。このアプローチにもいくつかの問題があります。

  • 一部の関数は、データの反復を必要としません。
  • の CPU 使用率x + yは のそれよりも低くなっていx + y * zます。

サーバーの負荷に関係なく、同じ操作ですべてのユーザーが同じになるように、C#/.Net で CPU 使用率の情報を計算する良い方法は何ですか?

おそらく、実際のアセンブリ レベルの指示の合計量は? C# でその情報を取得する方法はありますか?

他にどのようなアプローチや推奨事項を共有できますか?

これを調べてくれてありがとう。

4

1 に答える 1

14

ユーザーが実行したいものを別のプロセスで実行し、プロセスが完了した後のCPU 時間を調べます。これは、プロセスが実際に CPU で実行された時間のみが考慮されるため、実時間とは異なります。

ドキュメントを読みたくない人のための最小限の例:

ProcessStartInfo psi = new ProcessStartInfo(@"C:\Blah\Foo.exe");
Process p = Process.Start(psi);
p.WaitForExit();
TimeSpan time = p.TotalProcessorTime;
p.Close();

ただし、これを非同期で実行することもできます。

見積もり、推測、黒魔術は必要ありません。とにかく確実に計算することはできません。

于 2012-06-10T15:27:54.873 に答える