指定されたインターフェイスを実装する未知のアセンブリを動的にロードするプロジェクトがあります。インターフェイスを実装する以外に、アセンブリの内容や目的がわかりません。
これらのアセンブリで使用できる処理能力の量を何らかの方法で制限する必要があります。プロセッサの優先順位は私が探しているものではありません。サーバーが任意にビジーである可能性があるため、ストップウォッチを使用してアセンブリの実行に一定の時間を割り当てることができません。
最適には、CPU使用率の完全に負荷に依存しない測定値を指定したいと思います。必要に応じて、独自のプロセスでアセンブリを実行できます。
特定のスレッド(またはスレッドが最適ですが、プロセス)の時間の経過に伴う合計CPU使用率を何らかの方法で測定する方法はありますか?
プロセスパフォーマンスカウンターを使用するのでしょうか、それとも信頼性が低すぎるのではないかと思います。サイクルごとの精度は必要ありませんが、各アセンブリの実行に割り当てられる計算能力を制限するには、かなり高い精度が必要になります。
私の状況を少し外挿します。プロセスの優先順位付けを求めていない理由は、リソースを使い果たすことを恐れていないためです。特定のアセンブリが使用する「いくつの」リソースを測定できることを確認する必要があります。したがって、サーバーが任意であるという私のポイントです。忙しい。
2つのアセンブリXとYがあるシナリオの例を想像してみてください。それぞれが特定のアルゴリズムを実装しており、どのアセンブリが最も速くジョブを実行するかについてのプリミティブテストを実行したいと思います。各アセンブリを実行し、「Z」リソースが使用されるまで実行します。その時点で、どのアセンブリが最適な作業を行ったかを評価します。この場合、一方のアセンブリが100%CPUで3秒間実行され、もう一方のアセンブリが5分間で2%CPUで実行されるかどうかは関係ありません。重要なのは、リソースの合計使用量です。
CPU時間perfcounterを使用して大まかな制限を行うことができるかもしれないと思っています。新しいスレッドで各アセンブリを実行し、所定のCPU時間を使用するまで実行します。その時点で、プロセスを強制終了して結果を評価します。私はそれが十分に正確ではないのではないかと心配しています。