定时器间隔当CPU利用率和内存增加时增加

问题描述 投票:0回答:1

我的代码中有一个定时器,持续'x'秒。代码有多个线程,并且有多个计时器。现在我注意到,我的应用程序在运行一段时间后进入挂起状态,从日志中我注意到计时器间隔有所不同。它增加了。这怎么可能,任何人都可以为此提供解决方案?在c#中有没有替代计时器?

      _timernew = new System.Timers.Timer(10000)
            {
                AutoReset = false
            };
            _timernew .Elapsed += (sender, e) => { DoSomething };
            _timernew .Enabled = true;
c# multithreading timer cpu
1个回答
1
投票

定时器不准确。间隔是事件触发前的最小延迟,但不保证您的计时器事件将在间隔过去时准确执行。

当间隔过去时,计时器将偶数处理程序排队到线程池。因此,当线程池中有可用线程来获取处理程序,然后是可用的CPU核心来实际执行它时,将执行事件处理程序。

换句话说,计算机越忙,延迟发生的可能性就越大。

如果您需要更接近实时执行,则必须使用专用线程并将其优先级设置为高:

Thread myThread = new Thread(MyThreadMethod);
myThread.Priority = ThreadPriority.Highest;
myThread.Start();

但是,现在,在MyThreadMethod中,您需要实现一个复杂的机制来监视已经过了多长时间并决定是否必须执行实际代码。

你不应该只是循环并检查时间,因为这将占据100%的单个核心。也许你可以使用较小间隔的可怕的Thread.Sleep并检查时间是否已经过去。您必须使用比您需要的间隔小至少10的间隔.Thread.Sleep也不精确。

© www.soinside.com 2019 - 2024. All rights reserved.