2


0

私が100ms以下の間隔でたくさんのタイマー(10からおそらく数百)を持っているなら、それはそれらのうちのどれか1つの発砲に影響するでしょうか?

4 Answer


3


論理的には、いいえ、しかし実際には私はあなたがそれらのパフォーマンスが物理的なCPUの制約によって制限されるのを見つけるかもしれないと思います。

あなたはあなたのデザインを再検討したいと思うかもしれません。


2


それはしますが、あなたがそれを見るかどうか私は知りません。

1GHzのマシンをお持ちの場合 1クロックティックは1ナノ秒(1 / 1.000.000.000)です。 タイマーセットには10​​クロックティックがかかるとしましょう(おそらくそれ以上かかりますが、単なる実験です)。 その後、100個のタイマーセットに1マイクロ秒かかります。

しかし、実生活の例を説明するために必要な変数は他にもたくさんありますが、これは何が起こっているのかを知るのに役立ちます。


1


あなたはどんなTimerクラスを使っていますか? 多くの標準タイマーの分解能はそれほど高くなく、おそらく100ミリ秒未満の間隔では使用しないでください。 高解像度のタイマーの例については、http://www.m0interactive.com/archives/2006/12/21 / high_resolution_timer_in_net_2_0.html [ここ]を参照してください。

すでに述べたように、10秒または100秒のタイマーを設定することは不必要に複雑で、リソースを浪費するため、デザインを再検討する必要があります。 1つの高分解能1 msタイマーを使用して、1 ms以上の間隔を計ることができます - 単にタイマーが起動した回数を数えます。 追跡する間隔が複数ある場合は、間隔ごとに1つずつ、複数のカウントを持つ1 msタイマーを使用します。 そのため、100ミリ秒のインターバルでは、タイマーのカウントが100に達するとインターバルが経過しました(その後、このカウントを0にリセットする必要があります)。


0


まず第一にそれはあなたが使っているのが System.Timers.Timer`か System.Windows.Forms.Timer`かによって大きく異なります。

ウィンドウタイマーはすべてメインスレッドで実行されるため、前の処理が終了するまで1つのハンドラを起動できません。 タイマーが望みの時間に正確に開始することは保証されていませんが、たくさん持っているとお互いに影響を及ぼします。

ハンドラーは別々のスレッドで開始するため、スレッド化タイマーはあまり意味がありませんが、プロセッサーはまだコアよりも多くのスレッドを同時に実行することはできません。