【问题标题】:How to restrict the CPU usage a C# program takes?如何限制 C# 程序占用的 CPU 使用率?
【发布时间】:2008-10-31 09:00:38
【问题描述】:

我正在开发一个 C# 程序,并且我有一个函数消耗过多的 CPU。我想知道一种通过代码(而不是任何外部应用程序)来控制它并限制 CPU 使用百分比的方法。 例如,如果它使用 90% 的 CPU 使用率,要让我的应用程序只消耗 20%,即使它变得更慢。它必须在应用程序内自动完成。 如果你提供一个类,那就太棒了。

【问题讨论】:

  • 这听起来像一个拐杖:攻击症状而不是问题。您为什么不发布该方法正在尝试做什么并请求我们帮助优化该方法。
  • 这可能是一个拐杖,但我可以想到一些应用程序来实现这个想法,例如:一个 CPU 绑定的后台任务来处理数字,办公室 PC 的分布式计算环境中的一个节点,一个人工智能监控和学习我的使用习惯的程序。
  • 要将 CPU 使用率限制在 50%,请在双核上运行;对于 25% 的上限,在四核上运行它:D
  • 我的想法就像 Brian Ensink 是让应用程序在后台运行,但限制是消耗周期的方式。四核的想法很有趣
  • @Coehorn:解决症状听起来像是拐杖,但它肯定是大多数 MD 和大多数制药行业的工作方式(尽管与编程无关)。

标签: c# cpu


【解决方案1】:

我不知道你是否可以这样做,但你可以通过Priority 属性更改正在执行的线程的线程优先级。您可以通过以下方式设置:

Thread.CurrentThread.Priority = ThreadPriority.Lowest;

另外,我不认为你真的想限制它。如果机器处于空闲状态,您希望它忙于任务,对吗? ThreadPriority 有助于将此信息传达给调度程序。

【讨论】:

  • 这会对一些人有所帮助,并且是我所知道的唯一方法。
  • 我已经看到 Windows 应用程序能够精确地将自己限制在......比如说 50% 的 CPU。错误率小于 1%。
  • 精确封顶到底有什么好处?空闲周期被浪费了。
【解决方案2】:

您可以通过在循环中调用 Thread.Sleep(milliseconds) 来减慢循环。这会将 CPU 交还给调度程序。

但是“消耗过多的 CPU”让我认为您可能会遇到更根本的问题。该线程是否正在轮询并等待其他内容?如果是这样,您应该考虑使用事件或其他一些基于内核的信号机制。

【讨论】:

    【解决方案3】:

    我猜您需要查询某种操作系统 API 以了解您消耗了多少 CPU 并从中做出限制决策(例如 Thread.Sleep)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2012-07-06
      相关资源
      最近更新 更多