【问题标题】:DispatcherTimer and high CPU loadDispatcherTimer 和高 CPU 负载
【发布时间】:2010-06-23 22:01:44
【问题描述】:

嘿,我有一个 WPF 应用程序并使用 DispatcherTimer 每分钟触发一个事件。 我运行我的应用程序,cpu 负载跳到 100%。我尝试在不使用计时器的情况下编译应用程序,但 cpu 负载非常低,正如我预期的那样。

示例代码:

DispatcherTimer MainTimer = new DispatcherTimer();
MainTimer.Tick += new EventHandler(Core.Timers.MainTimer_Tick);
MainTimer.Interval = TimeSpan.FromSeconds(60);
MainTimer.Start();

public static void MainTimer_Tick(object sender, EventArgs e)
{
 // initialize new class, do something...
}

如果没有该代码,CPU 负载就会很低。 这应该是什么原因造成的?

更新 我可以使用其他计时器吗?准确性并不重要。

【问题讨论】:

  • 在 MainTimer_Tick 中没有代码时 CPU 负载是否低?
  • 使用 empty Tick 处理程序真的会降低性能吗?
  • 我真的不知道这是否是缓慢的表现。即使 Tick 中没有代码,CPU 负载也很高。
  • CPU 是跳到 100% 然后马上降到 0% 还是一直保持在 100%?这一点很重要,因为短暂的 100% CPU 峰值是非常正常的:CPU 要么工作要么不工作,它不可能 50% 处于活动状态(除非你在 2 个内核中计算 1 个内核完成 100% 的工作)。当您在任务管理器中看到 50% 时,这意味着某些应用程序正在做一些在很短的时间内使用 CPU 的事情,例如从文件中读取,此时 CPU 大部分处于阻塞(睡眠)状态等待设备赶上。跨度>
  • @repka:CPU 使用率是通过 CPU 用于执行不只是等待事件发生的线程的一秒(或其他时间间隔)的一部分来衡量的。所以 100% 的 CPU 使用高峰不是“正常的”;这通常意味着您的 CPU 处于活动状态一整秒。

标签: c# multithreading dispatchertimer


【解决方案1】:

我使用 System.Timers.Timer 解决了这个问题。它的行为正确。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 2014-09-29
    相关资源
    最近更新 更多