一个定时器与三个定时器的性能
我有一个关于System.Timers.Timer
在我的.NET应用程序中的用法的问题。
我有三个不同的事件,一个触发每秒,另一个触发每分钟,最后一个触发每半小时。
有一个或三个计时器是更好还是更好?
用一个定时器做的方法是检查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
只读TimeSpans。
这两种方式都没有太大的区别。 不管定时器的数量是多少,只有一个循环在后台进行。 在效率最低的时候,你将使用线程池中的3个线程,但是有很多可用的,所以这不是什么大问题。 如果它让你的代码更容易阅读,我会说它去。
请记住,这只适用于Threading.Timer
(也Timers.Timer
)。 Forms.Timer
行为有点不同,它可能会更好地坚持其中的一个,因为它只在UI线程上运行,所以你可能会遇到一些同步问题。
Threading.Timer与Forms.Timer
一些更多资源:
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/f9a1c67d-8579-4baa-9952-20b3c0daf38a/
我可以创建多少个System.Timers.Timer实例? 我可以扩展多少?
3与1相比,定时器的开销增加很少,代码很可能会更好一些(在可读性和可维护性方面)
我认为检查if是否比三个定时器花费更多,除此之外,你可能会遇到一些奇怪的情况,试图使用一个定时器。
我会与三个计时器一起去。
链接地址: http://www.djcxy.com/p/63019.html