我有一个多线程C#应用程序,核心逻辑位于Timer.Elapsed
事件处理程序中。事件处理程序包含2个 for
循环,最多执行n * n = 5 * 5 = 25 times
。
该应用程序在我的电脑上运行良好。我针对应用程序运行了 VS 2010 Profiler
,并且 20% 的平均CPU使用率。
公司测试人员说,在他的电脑上,他的电话会跳到 50% 和 100% 之间PC。这对他造成了性能问题。
X
个数量
CPU?任何帮助都将不胜感激。
答案 0 :(得分:6)
我猜你真的是指第三颗子弹,但我们无法在不知道代码在做什么的情况下回答这个问题。但是(没有任何背景的随机建议):
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 毫秒,也可以节省处理器的汁液。