System.Threading.Timer を開始するアプリを開発しています。これは、シリアル ポートに対してかなり高速な読み取り/書き込みを行います (100 ミリ秒ごと)。タイマーのコールバック メソッドは次のようになります。
if (_timerTaskRunning)
{
Debug.WriteLine("still running");
return;
}
_timerTaskRunning = true;
... do the serial write/read here ...
_timerTaskRunning = false;
_timerTaskRunning
フラグは、前のタイマー「サイクル」が終了していない場合、つまり 100 ミリ秒以上かかっている場合にデリゲートが実行されないようにするための安全策です。
アプリを初めて起動すると、if
ステートメントから約 10 個のデバッグ メッセージが表示されます。その後落ち着きますが、7 ~ 8 秒後に別のメッセージのグループが表示されます。再び落ち着いて、ときどきメッセージのグループがさまざまな数で表示されるのを目にします。
メッセージの最初のグループは、アプリがまだ起動しているため、オブジェクト/UIの初期化などのためにタイマーデリゲートの実行が遅いことが原因であると想定していますが、後続のメッセージは、ガベージコレクションが頻繁に開始され、速度が低下していることが原因である可能性がありますダウン?「モック」シリアルポートでも同じ動作が見られるため、シリアルポートではありません。
タイマーの最初の実行を数秒遅らせてみましたが、違いはありません。タイマーが開始してから最初の 1 秒ほどの間、デバッグ メッセージのバッチが表示されます。タイマー タスクのいくつかをスキップすることは世界の終わりではありませんが、何が原因であるかを知ることは興味深いでしょう。原因をさらに調査するために私にできることはありますか? まだ使ったことがないのですが、おすすめのカウンターを教えてください。