Windows サービスで最適なタイマーの選択
Windows サービスでは、特定のタスクを定期的に実行することが一般的な要件です。この目的で使用できる主なタイマー クラスは、System.Timers.Timer
と System.Threading.Timer
の 2 つです。どのタイマーを選択するかは重要であり、長所と短所を慎重に比較検討する必要があります。
不必要な実行時の依存関係を避ける
Windows サービスでタイマーを使用する場合は、System.Web.UI.Timer
または System.Windows.Forms.Timer
を使用しないように注意する必要があります。これらのタイマーは、ASP.NET アプリケーションと Windows フォーム専用に設計されています。これらをサービスに統合するには、サービスのランタイム環境と互換性がない可能性がある追加のアセンブリを含める必要があります。
System.Timers.Timer と System.Threading.Timer の適用性の比較
System.Timers.Timer
と System.Threading.Timer
はどちらも、Windows サービスでタイマーを使用するための可能なソリューションです。ただし、選択する際に考慮すべき特定の要素があります。
System.Timers.Timer
System.Timers.Timer
を効果的に使用するには、タイマーをクラス レベルで宣言して、タイマーの有効期間全体にわたってスコープが維持されるようにする必要があります。この措置により、ガベージ コレクションの動作が途中で終了することが防止されます。
System.Threading.Timer
System.Threading.Timer
にはより複雑なメカニズムがあります。目的のタイマー動作をカプセル化するデリゲートを指定する必要があります。さらに、オペレーティング システムとの対話を調整するには、適切な同期メカニズム (例: AutoResetEvent
) が必要になる場合があります。
コード例
次の C# コード例は、Windows サービスに System.Timers.Timer
と System.Threading.Timer
をデプロイする方法を示しています。
System.Timers.Timer の例
<code class="language-csharp">using System; using System.Timers; public class ServiceWithTimer { private static System.Timers.Timer _timer; public static void Main() { _timer = new System.Timers.Timer(10000); // 类级别声明定时器 _timer.Elapsed += OnTimedEvent; _timer.Interval = 2000; _timer.Enabled = true; Console.WriteLine("按任意键停止服务..."); Console.ReadKey(); } private static void OnTimedEvent(object sender, ElapsedEventArgs e) { Console.WriteLine("定时器事件在 {0} 触发", e.SignalTime); } }</code>
System.Threading.Timer の例
<code class="language-csharp">using System; using System.Threading; public class ServiceWithTimer { public static void Main() { AutoResetEvent autoResetEvent = new AutoResetEvent(false); TimerCallback timerCallback = CheckStatus; Console.WriteLine("创建定时器..."); Timer stateTimer = new Timer(timerCallback, autoResetEvent, 1000, 250); Console.WriteLine("\n更改周期..."); stateTimer.Change(0, 500); Thread.Sleep(5000); stateTimer.Dispose(); Console.WriteLine("\n销毁定时器。"); } private static void CheckStatus(object stateInfo) { AutoResetEvent autoResetEvent = (AutoResetEvent)stateInfo; Console.WriteLine("检查状态..."); autoResetEvent.Set(); } }</code>
結論
と System.Timers.Timer
は両方とも、Windows サービスでスケジュールされたタスクを実装するための実行可能なソリューションを提供します。この 2 つのどちらを選択するかは、サービスの特定の要件とタイマー動作の制御の程度によって異なります。 System.Threading.Timer
以上がWindows サービスの System.Timers.Timer と System.Threading.Timer: どちらのタイマーを選択する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。