Windows 서비스 최고의 타이머 선택
Windows 서비스에서는 정기적으로 특정 작업을 수행하는 것이 일반적인 요구 사항입니다. 이 목적을 위해 사용할 수 있는 두 가지 기본 타이머 클래스가 있습니다: System.Timers.Timer
및 System.Threading.Timer
. 어떤 타이머를 선택하느냐가 중요하며 장단점을 신중하게 평가해야 합니다.
불필요한 런타임 종속성 방지
Windows 서비스에서 타이머를 사용할 때는 System.Web.UI.Timer
또는 System.Windows.Forms.Timer
을 사용하지 않도록 주의해야 합니다. 이러한 타이머는 ASP.NET 애플리케이션 및 Windows Forms용으로 특별히 설계되었습니다. 이를 서비스에 통합하려면 서비스의 런타임 환경과 호환되지 않을 수 있는 추가 어셈블리를 포함해야 합니다.
System.Timers.Timer와 System.Threading.Timer의 적용성 비교
System.Timers.Timer
및 System.Threading.Timer
은 모두 Windows 서비스에서 타이머를 사용할 수 있는 솔루션입니다. 그러나 선택할 때 고려해야 할 구체적인 요소가 있습니다.
시스템.타이머.타이머
System.Timers.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
및 System.Threading.Timer
모두 Windows 서비스에서 예약된 작업을 구현하기 위한 실행 가능한 솔루션을 제공합니다. 둘 사이의 선택은 서비스의 특정 요구 사항과 타이머 동작에 대한 제어 정도에 따라 달라집니다.
위 내용은 Windows 서비스의 System.Timers.Timer와 System.Threading.Timer: 어떤 타이머를 선택해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!