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

Dav*_*vio 6 .net c# timer

我对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.

Spe*_*ort 5

两种方式都不会产生太大的变化。无论计时器的数量是多少,后台都只会发生一个循环。在最低效率下,您将使用线程池中的3个线程,但是有很多可用的线程,所以这没什么大不了的。如果它使您的代码更易于阅读,我会说。

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

Threading.Timer与Forms.Timer

一些其他资源:

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

我可以创建几个System.Timers.Timer实例?我可以扩展多远?


Neo*_*ard 0

与 1 相比,3 个计时器增加的开销非常小,而且代码很可能会好得多(在可读性和可维护性方面)