C#应用程序 - 降低CPU使用率

时间:2010-11-08 09:19:19

标签: c# performance for-loop cpu-usage

我有一个多线程C#应用程序,核心逻辑位于Timer.Elapsed事件处理程序中。事件处理程序包含2个 for 循环,最多执行n * n = 5 * 5 = 25 times

该应用程序在我的电脑上运行良好。我针对应用程序运行了 VS 2010 Profiler ,并且 20% 的平均CPU使用率。

公司测试人员说,在他的电脑上,他的电话会跳到 50% 100% 之间PC。这对他造成了性能问题。

  • 我有什么办法可以解决这个问题吗?
  • 高CPU使用率究竟意味着什么?
  • 这会影响他的电脑吗?
  • 是否可以告诉应用程序仅使用X个数量 CPU?

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:6)

  • 不太频繁地运行计时器事件
  • 在工作线程上进行工作(因此UI至少具有响应性)
  • 在计时器中减少工作量(或者更有效率)
  • 获得更多CPU

我猜你真的是指第三颗子弹,但我们无法在不知道代码在做什么的情况下回答这个问题。但是(没有任何背景的随机建议):

  • 查看任何集合访问权限,以查看是否存在字典,散列集或类似内容的地方
  • 检查您是否正在进行大量的IO(尤其是数据库)可以减少
  • 检查您是否通过Invoke(或UI等效的)进行大量线程切换

答案 1 :(得分:3)

你在想知道和猜测模式。忘记CPU百分比。专业人士所做的是找出为什么该计划花费时间以及是否有必要。

你可以做的就是在长循环中运行该代码并对其进行采样。 I use this method. 堆栈样本将优先落在调用树的重分支中。 有可能你可以砍掉一些重型分支并获得一个很好的加速。

答案 2 :(得分:1)

只需在for循环中添加Thread.Sleep(1);即可。这样可以稳定CPU使用率并限制在最大速度下使用CPU。

答案 3 :(得分:0)

可能是您的应用程序运行多个线程。我有同样的问题,运行多个线程,并在每个线程中有持续更新,使应用程序使用率从50%到100%。

在研究了这个问题后,我刚刚介绍了线程连续循环的延迟(Thread(100))。这使应用程序使用率回到1%到3%。

答案 4 :(得分:0)

添加Thread.Sleep(int);在代码中减少cpu时间。即使只有 30 毫秒,也可以节省处理器的汁液。