【发布时间】: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