【发布时间】:2026-02-08 02:00:01
【问题描述】:
我有一个多线程 C# 应用程序,其中核心逻辑位于 Timer.Elapsed 事件处理程序中。事件处理程序包含 2 个 for 循环,最多执行 n * n = 5 * 5 = 25 times。
该应用程序在我的电脑上运行良好。我在 20% 的应用程序和 CPU 使用率平均值上运行 VS 2010 Profiler。
公司测试人员说,在他的 PC 上,这在他的 PC 上跳跃到 50% 和 100% 之间个人电脑。这给他带来了性能问题。
- 有什么办法可以解决这个问题吗?
- 高 CPU 使用率究竟意味着什么?
- 这会影响他的电脑吗?
- 是否可以告诉应用程序仅使用
X数量 CPU?
任何帮助将不胜感激。
【问题讨论】:
-
循环执行的次数只意味着它执行的上下文。如果您执行 25 次昂贵的操作,这可能是一个大问题。如果总和为 25 则无关紧要。
-
你的计时器多久触发一次?您是等待操作完成后再重新启动计时器,还是不顾前一个循环是否完成而一次又一次地启动循环?
-
定时器每秒执行一次。在计时器事件处理程序中,我在第一行代码中停止计时器并在最后一行代码中重新启动它。实际上,这只会在事件之间产生 1 秒的延迟。启动和停止计时器之间的代码在内存中对 ConcurrentDictionary 进行一些计算,这些计算可能会大幅增长。计算非常简单,但基于大量数据。此事件处理程序中不会发生与 UI 的交互,因此我没有使用 DispatcherTimer 或 BackgroundWorker。 ConcurrentDictionary 由各种事件更新。
-
我最初将这段代码放在一个线程中,它有一个while循环,循环一个循环控制变量,即while(variable) { //Some Code }。这种方法效率较低,因为它消耗了更多资源。因此我切换到一个计时器,这降低了 CPU 的使用率。
标签: c# performance for-loop cpu-usage