2

これは、完全に .NET 関連の質問ではない可能性があります。いくつかのガジェットを制御する .NET アプリケーションを作成しています。ガジェットに定期的に (たとえば 500 ミリ秒ごとに) コマンドを送信します。コマンドを送信するとすぐに、タイマーを開始します。(.NET ストップウォッチ クラス)

ガジェットがたとえば 10 ミリ秒以内に応答しない場合は、もう一度コマンドを送信します。応答がある場合は、さらにコマンドを送信して応答を処理することで、ガジェットの状態を監視し続けます。

この 1 つのガジェットで他のことを行うために、2 つまたは 3 つのストップウォッチ タイマーを並行して実行しています。

今、私は潜在的に数千のこれらのガジェットを監視および制御したいと考えています (最大で 5000 になる可能性があります)。ガジェット用のオブジェクトを 1 つ作成すると、並行して実行される 10000 ~ 15000 個のストップウォッチ オブジェクトが表示されます。ストップウォッチがどのように機能するかはわかりませんが、時間を追跡するためにハードウェアタイマーまたはそのようなものに依存していると思います.

私の質問は、Windows でこのような多数のストップウォッチを同時に処理できるかということです。

4

6 に答える 6

8

このデザインを再考することをお勧めします。まず、Stopwatch はその言葉どおりに機能します。つまり、ストップウォッチのように機能します。特定の間隔でイベントを発生させたい場合は、さまざまな Timer クラスを調べる必要があります。

そうは言っても、ガジェット間でタイマーを共有することをお勧めします。作成した単一のスケジューラで使用されるタイマーが少なく、スケジューラがガジェットを管理する場合、すべてのパフォーマンスが大幅に向上し、記述と理解がおそらくより簡単になることがわかります。

于 2009-03-19T22:29:42.783 に答える
7

ストップウォッチは、Windows API 呼び出しの結果を保持する変数にQueryPerformanceCounter()他なりません。「実行中」の間、オーバーヘッドはありません。停止するとQueryPerformanceCounter()もう一度呼び出されるため、パフォーマンスは問題ないはずです。とはいえ、Reed Copsey に同意します。設計を再考する必要があります。ガジェットの数が非常に多いため、デバイス ドライバーについて考え始めました。

于 2009-03-19T22:32:51.530 に答える
0

問題は、いくつかのタイマーを処理できるかどうかだと思います。何千ものタイマーを読んで何も機能しないだけで、多くの時間を無駄にします。

Stopwatch クラスの背後にある実装については知りませんが、開始時と停止時にタイマーの値を読み取るだけだと想像できます。そのため、Stopwatch インスタンスはリソースをほとんど必要としません。

ただし、試してみてください。ループ内で数千個のインスタンスの配列を生成し、それらを開始して、何が起こるかを見てください。

于 2009-03-19T22:35:03.257 に答える