System.Windows.Forms.Timer性能

时间:2009-01-24 20:18:37

标签: .net winforms timer

我们有一个包含大量用户控件的应用程序,这些控件经常根据System.Windows.Forms.Timer进行更新。我可以安全地向每个控件添加一个Timer实例吗?或者我应该有一个Singleton Timer,它会一直运行所有实例使用?引擎盖下真的发生了什么?每个计时器都会有一个额外的线程(用于计数)吗?

3 个答案:

答案 0 :(得分:2)

System.Windows.Forms.Timer是通过好的'User32 Timers来实现的。因此,它们不使用或需要单独的线程来进行操作。也就是说,它们是一种有限的资源,因为你不能拥有无数的资源。

如果您说使用计时器的用户控件很多,那么“真正意义上的”是什么意思? 10? 10000?

当你说他们经常更新时,你的意思是什么?每一分钟?每100毫秒?他们的计时器可以快速射击吗?

对您的应用进行压力测试。查看在开始崩溃之前可以激活的控件数量,或者变得非常慢以至于无法使用。有可能,你会发现WM_TIMER消息的内部处理开销在你用完其他资源之前很久就会导致性能下降。

答案 1 :(得分:1)

没有其他线程。您的线程的消息队列中只有很多WM_TIMER消息。因此,即使它们的时间跨度重叠,这些计时器也不会并行执行它们的代码。

我认为为evey控制设置一个单独的计时器并没有什么坏处。至少它肯定不会比使用单个计时器有任何可测量的性能差异。但代码将更具可读性。 ;)

顺便说一下 - 今天大规模迁移到多个CPU核心,考虑一下这可能不是一个可以从中受益的地方。

答案 2 :(得分:1)

定时器是否针对每个控件在不同时间点火?他们每个人都需要一个单独的计时器吗?

请记住,您可以将多个事件处理程序连接到单个事件,因此如果您使用计时器执行一些简单的动画,您可以使用一个计时器为许多控件触发事件来执行此操作...