2009-03-19 24 views
2

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

ガジェットが10ミリ秒以内に応答しない場合は、再度コマンドを送信します。それが応答した場合、私は、より多くのコマンドを送信し、応答を処理することによって、ガジェットのステータスを監視し続けます。

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

ここでは、これらのガジェットが何千もある可能性があることを監視して制御したいと考えています(最大5000になる可能性があります)。ガジェットのオブジェクトを1つ作成すると、10000〜15000のストップウォッチオブジェクトが並行して実行されます。ストップウォッチの仕組みがわからないけど、ハードウェアのタイマーや時間を守るために使っていると思う。

私の質問は、Windowsは同時に多数のストップウォッチを処理できますか?

+0

あなたは知っています、私は興味があります:5000台のデバイスをどのようにして1台のコンピュータに接続しますか? –

+0

デイジーチェーンになっています! 12個のガジェットがインターフェースボックスに接続されています。各ボックスは、4つの他のボックスなどにデイジーチェーン接続できます。各ガジェットには、この階層内に固有のアドレス指定可能なIDがあります。 –

答えて

8

このデザインを再考することをおすすめします。最初に、ストップウォッチはちょうどそれを言う - それはストップウォッチのように動作します。特定の間隔でイベントを発生させたい場合は、さまざまなTimerクラスを調べることをお勧めします。

つまり、ガジェット全体でタイマーを共有することをお勧めします。あなたが作成する単一のスケジューラで使用されるタイマーの数が少なく、スケジューラがガジェットを管理している場合は、すべての方がはるかに優れていることがわかります。

7

ストップウォッチは、Windows APIコールQueryPerformanceCounter()の結果を保持する変数に過ぎず、実行中のオーバーヘッドはありません。停止するとQueryPerformanceCounter()がもう一度呼び出されるため、パフォーマンスは問題ありません。つまり、私はReed Copseyに同意します。あなたはデザインを考え直す必要があります。このような多数のガジェットがあると、私はデバイスドライバについて考え始めるだろう。

0

私はあなたがいくつかの多くのタイマーを処理することができれば質問があるべきだと思います。何千ものタイマーを読んで機能を持たないだけでも多くの時間を無駄にします。

私はStopwatchクラスの背後にある実装については気づいていませんが、開始時と停止時にタイマーの値をもう一度読み込んでいると思います。そのため、Stopwatchのインスタンスではリソースが一切必要ありません。

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

0

ガジェット応答を保持するグローバルキューと、キューを照会し、必要に応じてメッセージを再送信する1つまたはいくつかのスレッドを考えてみましょう。それはより良い行います。

0

指定した間隔でイベントをスケジュールするのに1回のソースを使用してください。

0

ストップウォッチクラスはかなり簡単です。それは常に「走っている」ものではありません。起動するように指示すると、システム時刻が表示され、一時停止、停止、リセットなどを指示すると、これを行うたびにシステム時刻が表示されます。 ElapsedMillisecondsを要求することは、(Processor.CurrentTicks - StartTicks)/ TicksPerMillisecondと言うことと同じです。本当にシンプルです。システムは非常に多くのこれらを処理することができます。

これはあなたの問題の正しいデザインであるかどうかについては言及していません。あなたの質問に答えるだけで、問題なく何千ものストップウォッチを処理できます。

関連する問題