8

現在、System.Threading.Timer を 10 秒間隔で使用しています。タイマーが起動するたびにファイルに書き込む小さなコードを追加しましたが、ほとんどの場合は時間通りに起動しますが、場合によっては (おそらくアプリの残りの部分が購入されている場合)、30 秒間起動に失敗しますまたは 40 秒、すばやく連続して何度も発射します。

.NET 3.5 で使用できる、より信頼性の高いタイマーはありますか?

タイマーは次のように設定されます

Timer someTimer = new Timer(new TimerCallback(SomeMethod), null, 0, 10000);

...そしてコールバックは次のとおりです。

private static void SomeMethod(object state)

ただし、Timer は通常正しく起動するため、これよりも多くのコードを提供することは困難です。大規模なアプリケーション (〜 100,000 行程度) に埋め込まれ、複数のスレッドが左、右、中央で起動されると、タイマーが断続的に起動するのがゆっくりと見え始めます。ThreadPool が使い果たされている可能性があることを示唆する投稿をいくつか見たので、現在、これが私が経験していることであるかどうかを調べています。

4

2 に答える 2

8

.net でさまざまなタイマー クラスを参照する

.net の別のタイマー クラス

.NET には「Timer」と呼ばれる 3 つのタイマー クラスがあります。Windows フォームを使用しているように聞こえますが、実際には System.Threading.Timer クラスの方が便利だと思うかもしれません。コールバック。

より正確なタイマー - MSDN による

Windows フォーム タイマー コンポーネントはシングル スレッドであり、精度は 55 ミリ秒に制限されています。精度の高いマルチスレッド タイマーが必要な場合は、System.Timers 名前空間の Timer クラスを使用します。

于 2012-05-28T09:03:49.793 に答える
5

これは、スレッド プールの枯渇とまったく同じように聞こえます。スレッド プールで実行されている長時間実行/ブロックしているジョブに注意し、async io を使用して書き換えるか、CPU を集中的に使用する長時間実行ジョブの場合は、これらのジョブをスレッド プールで実行しないでください。それらを独自のスレッドで実行するか、バックグラウンド ワーカーを使用します。

于 2012-05-28T09:38:44.667 に答える