计时器比System.Threading.Timer更可靠

时间:2012-05-28 08:53:39

标签: c# .net timer

我目前正以10秒的间隔使用System.Threading.Timer。每次计时器触发时,我都会添加一小段代码写入文件,而且大多数情况下它会按时触发,有时候(大概是应用程序的其余部分是买的),无法触发30秒或者40秒,并且一次又一次地连续发射。

我可以在.NET 3.5中使用更可靠的计时器吗?

计时器设置如下

Timer someTimer = new Timer(new TimerCallback(SomeMethod), null, 0, 10000);

...回调是:

private static void SomeMethod(object state)

然而,提供比这更多的代码是很困难的,因为Timer通常会正确触发。当它嵌入一个大型应用程序(约100,000行左右)时,多个线程被射击,左,右和中心,你慢慢开始看到计时器间歇性地发射。 我看过几篇帖子暗示ThreadPool可能已经筋疲力尽了,所以我现在正在调查,看看这可能是我遇到的情况。

2 个答案:

答案 0 :(得分:8)

请参阅.net

中的不同计时器类

Different Timer class in .net

.NET中有三个名为“Timer”的计时器类。听起来你正在使用Windows Forms,但实际上你可能会发现System.Threading.Timer类更有用 - 但要小心,因为它回调了池线程,所以你不能直接与你的表单交互回调。

更精确的计时器 - 根据MSDN

Windows窗体计时器组件是单线程的,精度限制为55毫秒。如果需要更高精度的多线程计时器,请使用System.Timers命名空间中的Timer类。

答案 1 :(得分:3)

这听起来就像线程池饥饿一样。注意在线程池中运行的长时间运行/阻塞作业,并使用async io重写,或者在长时间运行的CPU密集型作业的情况下,只是不要在线程池中运行这些作业。在他们自己的线程上运行它们或使用后台工作程序。