我有一個關於在我的.NET應用程序中使用System.Timers.Timer
的問題。單定時器vs三個定時器性能
我有三個不同的事件,一個觸發每秒鐘,另一個觸發器每分鐘,最後一個觸發每半小時。
擁有一個計時器還是三個計時器,性能更好嗎?
使用一個定時器做到這一點的方法是檢查ElapsedEventArgs
'SignalTime並將其與先前測量的時間進行比較。當然,如果你已經改變了日期時間,這並不是很有效,但這不是問題。基本上它每隔一秒鐘就過去一次,我檢查是否已經過了一個半小時......
我擔心使用3個計時器會產生太多開銷。我錯了嗎?爲了簡單和清晰,我應該使用3還是1定時器?
代碼:
private void TimerEverySecondElapsed(object sender, ElapsedEventArgs e)
{
timerEverySecond.Enabled = false;
OnTimerElapsed(TimerType.EverySecond);
// Raise an event every minute
if ((e.SignalTime - previousMinute) >= minuteSpan)
{
OnTimerElapsed(TimerType.EveryMinute);
previousMinute = e.SignalTime;
}
// Raise an event every half hour
if ((e.SignalTime - previousHalfhour) >= semiHourSpan)
{
OnTimerElapsed(TimerType.EverySemiHour);
previousHalfhour = e.SignalTime;
}
timerEverySecond.Enabled = true;
}
minuteSpan
和semiHourSpan
是隻讀的時間跨度。
這不回答這個問題,但另一種選擇是有兩個定時器(一個用於秒,一個用於分鐘/30分鐘)。 – Rotem
'只有你可以回答這個問題,有一個計時器還是三個計時器會更好嗎?這是你應用程序的瓶頸嗎? –
**如果您僅使用一個計時器(兩個_if_不會使您的代碼變慢,您是否**配置文件**),那麼性能不會受到任何可測量的影響**,您將節省開銷在資源上)三個計時器。但是你必須考慮的是**如何執行**那個操作(如果你使用一個單一的定時器,你可能需要在池中運行它們,因爲同步**順序執行**可能會延遲最後一個)。 –