定时器延迟随着时间的推移会降低或变得不一致?

Nat*_*han 2 .net c# timer

我希望有人可以对我可能发生的事情有所了解.以下是最新动态的摘要.

我有一个应用程序,可以做很多"东西".它是一个非常庞大的应用程序,使用许多线程进行大量的数字运算.有几个定时器使用.在很长一段时间内,计时器停止一直调用已经过的处理程序.

例如:我有一个定时器设置为每秒过去.几个小时后,计时器开始随机触发.如果我没有重新启动应用程序,性能会降低,定时器会稍后启动,最后会变为3或4秒,从而迫使我重新启动应用程序.我无法识别任何泄漏.CPU使用率不会上升,内存不会上升,服务器也不会接近最大值.任何人都可以给我一些关于可能导致这种情况的想法吗?

private void Timer_Elapsed(object source, ElapsedEventArgs e)
{
    if (seconds > 0)
    {
        seconds--;

        timer.Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*eff 5

您是否有可能耗尽线程池?大多数计时器使用线程池线程调用处理程序.如果所有线程池线程都在使用中,它将排队,直到有一个可用.

如果是这种情况,请切换一些处理以使用自己的线程,而不是线程池线程.

为了测试你是否正在耗尽线程池,启动一个后台线程,定期(每秒几次)检查ThreadPool.GetAvailableThreads并在可用时很小的情况下记录消息(即使它在你检查时从不实际为零,如果它有时接近零那么这很可能是问题所在.

ThreadPool.SetMaxThreads尽管这可能不是最佳解决方案,但可以更改池的大小.如果您正在使用线程池线程来执行更长时间的运行任务,请将其停止.对于长时间运行的任务,请使用自己的线程.