一个定时器与三个定时器的性能

时间:2012-12-06 11:13:52

标签: c# .net timer

我对我的.NET应用程序中System.Timers.Timer的用法有疑问。

我有三个不同的事件,一个触发每秒一个,另一个触发每分钟,最后一个触发每半个小时。

有一个或三个计时器,性能更好吗?

使用一个计时器的方法是检查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;
    }

minuteSpansemiHourSpan只是TimeSpans。

3 个答案:

答案 0 :(得分:5)

不管怎么说都不会产生太大的影响。无论定时器的数量如何,后台只有一个循环。在它效率最低的情况下,您将使用线程池中的3个线程但是有一个 lot 可用,所以这不是什么大问题。如果它让你的代码更容易阅读,我会说它去吧。

请注意,这仅适用于Threading.Timer(AKA Timers.Timer)。 Forms.Timer行为略有不同,因为它只能在UI线程上运行,因此可能会更好地坚持使用其中一个,因此您可能会遇到一些同步问题。

Threading.Timer vs. Forms.Timer

更多资源:

http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/f9a1c67d-8579-4baa-9952-20b3c0daf38a/

How many System.Timers.Timer instances can I create? How far can I scale?

答案 1 :(得分:0)

3计时器与1相比增加了很少的开销,代码很可能会更好(在可读性和可维护性方面)

答案 2 :(得分:0)

我认为使用if检查比三个计时器更多的开销,除了你可以在一些奇怪的情况下试图使用一个计时器。

我会选择三个计时器。