我对System.Timers.Timer我的.NET应用程序的使用有疑问.
我有三个不同的事件,一个触发每秒,另一个触发每分钟,最后一个触发每半小时.
有一个或三个计时器,性能更好吗?
使用一个计时器的方法是检查ElapsedEventArgs'SignalTime并将其与先前测量的时间进行比较.当然,如果您更改了DateTime,这并不常用,但这不是问题所在.基本上它每过一秒我检查一分钟或半小时是否也过去了......
我担心的是使用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;
}
Run Code Online (Sandbox Code Playgroud)
minuteSpan并且semiHourSpan只读TimeSpans.
两种方式都不会产生太大的变化。无论计时器的数量是多少,后台都只会发生一个循环。在最低效率下,您将使用线程池中的3个线程,但是有很多可用的线程,所以这没什么大不了的。如果它使您的代码更易于阅读,我会说。
请记住,但这仅适用于Threading.Timer(AKA Timers.Timer)。Forms.Timer行为略有不同,最好坚持使用其中之一,因为它仅在UI线程上运行,因此您可能会遇到一些同步问题。
一些其他资源:
http://social.msdn.microsoft.com/Forums/zh-CN/netfxbcl/thread/f9a1c67d-8579-4baa-9952-20b3c0daf38a/
我可以创建几个System.Timers.Timer实例?我可以扩展多远?
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |