如何以编程方式将程序的 CPU 使用率限制在 70% 以下?

2023-12-22

最近,我在构建程序时变得更加注重健康,我观察到大多数程序需要 2 或 3 分钟才能执行,当我检查任务调度程序时,我发现它们消耗了 100% 的 CPU 使用率,可以我在代码中以编程方式限制这种用法?这肯定会让我能够在给定时间运行多个程序。

谢谢, 尼迪


这个帖子已经有四年多了,它仍然让我烦恼,接受的答案是批评这个问题而不是回答它。您想要限制程序占用的 CPU 时间的正当理由有很多,我可以立即列出一些。

不使用所有可用的空闲 CPU 周期似乎是一种浪费,但这种心态是有缺陷的。与旧式 CPU 不同,大多数现代 CPU 并不以固定时钟速度运行 - 许多 CPU 都有省电模式,可以在这些模式下运行当负载较低时降低时钟速度和 CPU 电压。 CPU 在执行计算时也会比运行 NOOP 时消耗更多的电量。这对于在高负载时需要风扇来冷却 CPU 的笔记本电脑尤其重要。短时间以 100% 的速度运行任务所消耗的能源远多于以 25% 的速度运行任务四倍的时间。

想象一下,您正在编写一个后台任务,旨在在后台定期索引文件。索引任务是否应该以较低的优先级尽可能多地使用 CPU,还是将自身限制在 25% 并根据需要持续时间?好吧,如果它要消耗笔记本电脑上 100% 的 CPU,CPU 就会变热,风扇就会启动,电池也会很快耗尽,用户会感到恼火。如果索引服务自我节流,笔记本电脑可能能够以非常低的 CPU 时钟速度和电压运行完全被动冷却。

顺便说一句,Windows 索引服务现在在较新版本的 Windows 中自我限制,而在旧版本中从未这样做过。有关仍然不会限制自身并经常惹恼人们的服务的示例,请参阅 Windows Installer 模块。

如何在 C# 中内部限制应用程序的一部分的示例:

public void ThrottledLoop(Action action, int cpuPercentageLimit) {
    Stopwatch stopwatch = new Stopwatch();

    while(true) {
        stopwatch.Reset();
        stopwatch.Start();

        long actionStart = stopwatch.ElapsedTicks;
        action.Invoke();
        long actionEnd = stopwatch.ElapsedTicks;
        long actionDuration = actionEnd - actionStart;

        long relativeWaitTime = (int)(
            (1/(double)cpuPercentageLimit) * actionDuration);

        Thread.Sleep((int)((relativeWaitTime / (double)Stopwatch.Frequency) * 1000));
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式将程序的 CPU 使用率限制在 70% 以下? 的相关文章

  • 如何使用带有进度条的 HttpClient 下载文件?

    我创建了一个名为SiteDownload并添加了一些下载图像的链接 using System Collections Generic using System Linq using System Net using System Threa
  • C++ 天花板函数的奇怪结果

    我一直在尝试天花板功能并得到一些奇怪的结果 如果我对十进制数乘以百执行 ceil 运算 我会得到一定的结果 但是 如果我直接对该乘法的结果执行 ceil 我会得到完全不同的输出 另一个问题是 这些不同的结果仅发生在某些数字上 任何帮助 将不
  • 委托和接口如何互换使用?

    我可以使用接口方法代替委托吗 如何 我发现搜索接口方法比使用委托更快 我希望有一个简单的代码片段 理论上 可以通过包含单个方法的接口 例如 Java 没有委托 来完成委托完成的所有工作 然而 它使代码变得更加冗长并且没有带来什么好处 话又说
  • OpenGL,如何独立旋转对象?

    到目前为止我的代码 void display void glClear GL COLOR BUFFER BIT GL DEPTH BUFFER BIT Clear Screen And Depth Buffer glLoadIdentity
  • 子进程中的变量修改

    我正在研究科比和奥哈拉伦的作品Computer Systems A Programmer s Perspective 练习 8 16 要求程序的输出如下 我更改了它 因为他们使用了一个你可以在他们的网站上下载的头文件 include
  • 更新 OSX 命令行工具 6.3 后缺少 C++ 标头 <__debug>

    从 App Store 更新到 Command Line Tools 6 3 后 程序包括
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 析构函数、dispose 和 Finalize 方法之间的区别

    我正在研究垃圾收集器在 C 中的工作原理 我对使用感到困惑Destructor Dispose and Finalize方法 根据我的研究和理解 在我的类中拥有析构函数方法将告诉垃圾收集器以析构函数方法中提到的方式执行垃圾收集 该方法不能在
  • 二元运算符重载、隐式类型转换

    class my bool private bool value public my bool bool value value value explicit operator bool return value friend my boo
  • 如何在C中递归地找到另一个字符串中的字符串位置?

    我们有一个任务来创建带有两个字符串参数的递归函数 原型应该是这样的 int instring char word char sentence 如果我们愿意调用函数 instring Word Another Word 它应该具有以下返回值
  • 将数字 n 拆分为 k 个不同数字的总和

    我有一个数字 n 我必须将它分成 k 个数字 使得所有 k 个数字都是不同的 k 个数字的总和等于 n 并且 k 最大 例如 如果 n 为 9 则答案应为 1 2 6 如果 n 为 15 则答案应为 1 2 3 4 5 这就是我尝试过的 v
  • 如何在 .NET 中自定义 JSON 枚举的反序列化?

    我有以下示例 C 代码 它是使用 svcutil exe 应用程序从 xsd 自动生成的 DataContract public enum Foo EnumMember Value bar Bar 1 EnumMember Value ba
  • 使用 unrar 库 - 将文件提取到文件流缓冲区中

    我需要的是能够将 rar 文件中的文件提取到流中 我正在创建一个测试用例来了解如何使用解压源文件 http www rarlab com rar unrarsrc 3 9 9 tar gz 我已经搜索和修补了一段时间 但我不知道如何使用该库
  • 将数组显式衰减为指针

    最简洁 最惯用的方式是什么明确地将数组衰减为指针 例如 考虑您需要能够指导 SFINAE 或明确过载的情况 template
  • 我的 Opencv 应用程序处理速度非常慢

    我正在构建一个 OpenCV 应用程序 它从相机捕获视频 并在删除背景后将其覆盖在另一个视频上 我无法达到合理的速度 因为它以大约 1 fps 的速度播放输出 而我的背景去除以 3 fps 的速度工作 有没有办法以正常速度显示背景视频并以
  • Roslyn,通过 hostObject 传递值

    我正在尝试通过 hostObject 发送一个类 但显然它不想工作 using Roslyn Compilers using Roslyn Compilers CSharp using Roslyn Scripting using Rosl
  • 使用可变参数模板函数计算多个值的平均值

    我正在尝试编写一个函数来确定任意数量参数的平均值 所有参数都具有相同的类型 出于学习目的 我尝试使用可变参数模板函数来做到这一点 这是我到目前为止所拥有的 template
  • 仅最后一个用户控件显示内容控件

    我有一个奇怪的问题 我创建了一个带有标签和画布的用户控件 画布引用资源 但画布仅显示在我的堆栈面板中的最后一个控件上 这是我的窗户
  • 当前线程中的单例

    我的单身人士如下 public class CurrentSingleton private static CurrentSingleton uniqueInstance null private static object syncRoo
  • 使用 Powershell 或 C# 获取 Azure“文件和文件夹”作业状态

    我一直在尝试找到一种方法来获取在 AzureRM 中运行的几个客户上运行的 文件和文件夹 备份作业的状态 可以在 AzureRm 门户中手动找到状态 恢复服务保管库 gt 作业 gt 备份作业 使用powershell不显示任何作业信息 G

随机推荐

  • 如何防止用户在一小时内投票多次?

    目前 我有一个带有验证码的脚本 该脚本在提交时记录用户的 IP 地址 以防止用户每小时投票多次 然而 许多人正在使用代理来绕过这一投票限制 我想采用额外的保护 我意识到关于这个主题还有其他问题 但它们总是涉及希望用户只能投票一次 而不是定时
  • 如何在Python中获取log10值的倒数?

    y np log10 train set SalePrice 我如何找到这个的逆 我希望它返回到原始值而不是缩放后的值 希望以上答案对您或任何人想要 log10 以 10 为底 和 log 自然 的倒数有帮助 Logarithm and b
  • Xcode 9.0 模拟器“消失”

    我最近在我的机器上安装了 Xcode 9 0 GM 我启动它来玩玩 我在该方案中看到的唯一模拟器是 iPhone 8 iPHone 8 Plus 和 iPhone X 我单击 下载其他模拟器 认为解决方案就在那里 迎接我的是这个屏幕 这是我
  • Laravel 3:寻找如何使用模型的解释

    我是 MVC 新手 我的第一个框架是 Laravel 目前为 3 我已经开始专门在路线中编码 然后转移到控制器 然而 我正在控制器中执行所有数据库操作 我不明白如何使用该模型 示例要么演示控制器中的所有内容 要么演示路由中的所有内容 但它们
  • 如何将对象传递给 JSP 标记?

    我有一个 JSP 页面 其中包含一个脚本 我在其中实例化一个对象 我想将该对象传递给 JSP 标记而不使用任何缓存 例如我想完成这个
  • 找不到 java.lang.String android.os.SystemProperties.native_get(java.lang.String) 的实现

    每当我在设备上安装应用程序时都会出现错误 03 24 18 56 08 Launching app adb push home itstym AndroidStudioProjects hlthee app build outputs ap
  • 如何查找 Android 设备上设置的默认浏览器

    有什么方法可以找出 Android 设备上哪个浏览器被设置为默认浏览器 在 Android 设备上可能安装了多个浏览器 但其中只有一个设置为默认浏览器 我需要以编程方式找出它 提前致谢 尽早回复表示赞赏 这段代码可以帮助你 Intent b
  • 怎么叫沉默啊!在达利缓存存储上?

    我正在尝试在开发模式下使用缓存来开发应用程序 但是development log 垃圾邮件主要是由缓存日志造成的 我正在使用达利 我知道 达利有沉默 方法 https github com mperham dalli commit 8920
  • 如何修改一个大的 json 字符串?

    死一般的寂静 您在 Stackoverflow 上并不经常遇到这种情况 我添加了一小笔赏金来让事情顺利进行 我构建了一个 json 文档 其中包含有关各个国家 地区位置的信息 我添加了一些自定义键 这是 json 文件的开头 type Fe
  • Java 将 long 转换为字节 - 哪种方法更有效

    我有两种方法将 long 转换为字节数组 for int i 0 i lt 7 i data pos i byte value gt gt 7 i 1 lt lt 3 and for int i 7 i gt 0 i data p i by
  • 无法反序列化对象 - 应为 BEGIN_OBJECT,但在第 1 行第 1 列为 STRING

    首先我要说的是 我在发帖之前已经搜索过了 只是找不到答案 我在反序列化 JSON 时遇到问题 这是一个有效的 JSON 在http jsonlint com http jsonlint com 它是用 servicestack json 序
  • AVAudioSession 类别未按照文档指示工作

    我有一个 iOS 应用程序 在某些地方有一些音频反馈 但我希望允许用户在后台播放的任何其他音乐都可以在此之上播放 此外 我希望应用程序中的音频遵守静音开关 根据开发人员文档 此功能应全部由 AVAudioSession 环境类别启用 这是我
  • 如何使用 IOC 从存储库中删除工作单元功能

    我有一个使用 ASP NET MVC Unity 和 Linq to SQL 的应用程序 unity容器注册类型AcmeDataContext它继承自System Data Linq DataContext 有一个LifetimeManag
  • Firefox 通过 GeckoDriver 在 Selenium 3.0.1 中的 .Quit() 上抛出异常

    上下文 Firefox 50 0 2 64 位 C Visual Studio 2015 Windows Server 2012 R2 Azure ClearScript V8 5 4 7 Selenium Mozilla Firefox
  • 为什么我不能使用 AWS 的新 st1/sc1 EBS 卷作为根卷

    AWS 最近推出了 sc1 和 st1 HDD EBS 卷类型 在启动新的 EC2 实例或从已创建的 AMI 启动时 都尝试过 我似乎无法将它们用作根卷 我选择了一台 m4 机器 无论如何 根卷是 EBS 本身 下面是屏幕截图 我添加的第二
  • “模拟器”和“虚拟机”之间有哪些具体区别? [复制]

    这个问题在这里已经有答案了 我发现它们是不同的东西 但我真的无法说出为什么 有人说 模拟器是用来游戏的 虚拟机是用来操作系统的 我不同意这个答案 因为除了视频游戏控制台之外还有其他平台的模拟器 AMIGA 你能帮我吗 虚拟机利用 CPU 自
  • 使用html5上传浏览器中录制的音频

    我是 HTML Javascript 和公司的新手 所以请原谅我问一个可能很明显的问题 我想构建一个网络应用程序 用户可以在其中上传音频以及一些有关自己的信息 我有一个表格 大部分看起来像这样
  • EC2 上的 Java 8 应用程序

    我想知道是否有人知道我是否可以在 EC2 实例上安装 Java 8 我的应用程序打包为带有嵌入式 jetty 的 fat jar 因此仅 Java 8 运行时就足够了 我对 Linux 不太熟悉 我看到他们在默认 AMI 上只支持 Java
  • C# 中多线程和异步程序的区别

    我最初在 Stackoverflow 和 google 中搜索了类似类型的问题 只有一个链接给出了一些要点 但我无法清楚地理解 1 https social msdn microsoft com Forums en US 3de8670c
  • 如何以编程方式将程序的 CPU 使用率限制在 70% 以下?

    最近 我在构建程序时变得更加注重健康 我观察到大多数程序需要 2 或 3 分钟才能执行 当我检查任务调度程序时 我发现它们消耗了 100 的 CPU 使用率 可以我在代码中以编程方式限制这种用法 这肯定会让我能够在给定时间运行多个程序 谢谢