应用程序C#中的计时器开销

时间:2010-10-14 12:30:02

标签: c# .net

如果应用程序在后台连续运行(不管间隔时间),那么定时器会导致多少开销?

我并不担心定时器在打勾时会发出的呼叫,而是担心在性能最重要的应用中使用定时器的性能影响,并且我很想知道它有什么观点。

3 个答案:

答案 0 :(得分:8)

计时器在它的滴答声之间为应用程序增加了极低的成本。它使用操作系统的调度机制(无论您的操作如何都是活动的),而不是直观地轮询系统时钟的直观概念。

基本上,除了增加的内存和上下文切换数据添加(在这种情况下是少量添加。不应该只是在表单中添加一个按钮),不应该有任何更多的开销。

答案 1 :(得分:0)

Timer调用的事件将在定时器所属的同一个线程中运行,因此在执行任何逻辑时将阻塞该线程。这意味着如果Timer属于GUI层,Timer.Tick方法的执行将在GUI运行时锁定它。

为了保持主线程的性能,我建议使用BackgroundWorker代替它在自己的线程中运行。

答案 2 :(得分:0)

以同样的方式回答:定时器对于gui编程非常有用,但对于高性能任务来说几乎没用。计时器的一些问题:

  • 它们不是常规的毫秒级(事实上在Windows中,没有任何东西) - 它会在它的时间触发,但是当处理所有其他消息(鼠标键盘事件,控制更新)时,因为它是序列化的来自/到gui的其他消息
  • 不知道.net实现,但是他们浪费了mfc中的句柄

如果您正在考虑使用其他线程进行某些操作,请确保不要触摸任何gui组件。使用Invoke()或将gui的更新复制到某个队列,然后使用gui主线程中的计时器将其出列。