ホームページ >バックエンド開発 >C++ >Windows サービスの System.Timers.Timer と System.Threading.Timer: どちらのタイマーを選択する必要がありますか?

Windows サービスの System.Timers.Timer と System.Threading.Timer: どちらのタイマーを選択する必要がありますか?

DDD
DDDオリジナル
2025-01-20 18:24:14183ブラウズ

System.Timers.Timer vs. System.Threading.Timer in Windows Services: Which Timer Should I Choose?

Windows サービスで最適なタイマーの選択

Windows サービスでは、特定のタスクを定期的に実行することが一般的な要件です。この目的で使用できる主なタイマー クラスは、System.Timers.TimerSystem.Threading.Timer の 2 つです。どのタイマーを選択するかは重要であり、長所と短所を慎重に比較検討する必要があります。

不必要な実行時の依存関係を避ける

Windows サービスでタイマーを使用する場合は、System.Web.UI.Timer または System.Windows.Forms.Timer を使用しないように注意する必要があります。これらのタイマーは、ASP.NET アプリケーションと Windows フォーム専用に設計されています。これらをサービスに統合するには、サービスのランタイム環境と互換性がない可能性がある追加のアセンブリを含める必要があります。

System.Timers.Timer と System.Threading.Timer の適用性の比較

System.Timers.TimerSystem.Threading.Timer はどちらも、Windows サービスでタイマーを使用するための可能なソリューションです。ただし、選択する際に考慮すべき特定の要素があります。

System.Timers.Timer

System.Timers.Timer を効果的に使用するには、タイマーをクラス レベルで宣言して、タイマーの有効期間全体にわたってスコープが維持されるようにする必要があります。この措置により、ガベージ コレクションの動作が途中で終了することが防止されます。

System.Threading.Timer

System.Threading.Timer にはより複雑なメカニズムがあります。目的のタイマー動作をカプセル化するデリゲートを指定する必要があります。さらに、オペレーティング システムとの対話を調整するには、適切な同期メカニズム (例: AutoResetEvent) が必要になる場合があります。

コード例

次の C# コード例は、Windows サービスに System.Timers.TimerSystem.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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。