如何以编程方式将程序的 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% 以下? 的相关文章

  • 取消任务

    我尝试运行一个关于取消任务的简单示例 如下所示 CancellationTokenSource tokenSource2 new CancellationTokenSource CancellationToken token2 tokenS
  • c# GDI边缘空白检测算法

    我正在寻找解决方案检测边缘空白c 位图 来自 c 托管 GDI 库 图像将是透明的 or white 大多数 400x 图片的尺寸为 8000x8000px 边缘周围有大约 2000px 的空白 找出边缘的最有效方法是什么 x y 高度和宽
  • 检测 PowerShell 开关

    我正在用 C 开发 PowerShell cmdlet 并且有 true false switch 语句 我注意到 如果我希望 bool 为 true 我需要指定 SwitchName true 否则我会得到 Missing an argu
  • 使物体跟随旋转且差异很小

    我正在使我的对象跟随另一个对象的旋转 我希望我的对象以很小的差异旋转 也就是说 从当前的旋转来看 它不应该与另一个对象完全旋转 其旋转应该存在差异 使其旋转主要对象旋转的 10 我该怎么做呢 using System Collections
  • 时间跨度格式[重复]

    这个问题在这里已经有答案了 当您将时间跨度声明为以下形式时 如何优雅地格式化时间跨度以表示 1 小时 10 分钟 TimeSpan t new TimeSpan 0 70 0 我当然知道你可以为此做一些简单的数学计算 但我有点希望 NET
  • 使用加法求阶乘

    我正在尝试创建一个 C 代码来查找整数的阶乘 以便我可以将代码转换为汇编语言 我的代码似乎将第二个整数 乘 两次 即 5 4 4 3 我似乎无法找出原因 请帮助 define N 5 int main int j 0 int i 0 int
  • 如何从二维字节数组创建图像?

    在我的项目中 经过长时间的处理 我从红外摄像头获得了一个二维字节数组 字节数组中保存图像 如何在 C 中将该字节数组转换为图像 我知道通过 MemoryStream ms new MemoryStream byteArray System
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 防止重入并确保某些操作获取锁的正确方法是什么?

    我正在设计一个基类 当继承该基类时 它将针对多线程环境中的上下文提供业务功能 每个实例可能都有长时间运行的初始化操作 所以我想让这些对象可重用 为此 我需要能够 为这些对象之一分配上下文以允许其完成工作 防止对象在已有上下文的情况下被分配新
  • jQuery mousemove 性能 - 节流事件?

    我们面临着与 mousemove 连接的 jQuery 事件传播性能问题 我们有一个屏幕填充画布 需要跟踪用户是否在其上拖动鼠标 因此我们在该对象上添加了一个鼠标移动侦听器 如下所示 ourCanvas on mousemove funct
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • 比较已编译的 .NET 程序集?

    有没有什么好的程序可以与编译 NET 程序集进行比较 例如 我有 HelloWorld dll 1 0 0 0 和 HelloWorld dll 2 0 0 0 我想比较差异 我该怎么做 我知道我可以使用 NET Reflector 并使用
  • 如何使属性在 POST 请求上必需,但在 PUT 请求上不需要

    假设我有一个用户模型Email and Password用于身份验证目的的属性 如下所示 public class User public long Id get set Required public string FirstName g
  • ASP .NET 按钮事件处理程序不会在第一次单击时触发,而是在回发后第二次单击时触发

    背景 我正在自定义现有的 ASP NET C 应用程序 它有自己的小 框架 和约定 供开发人员在扩展 定制其功能时遵循 我目前正在扩展它的一些管理功能 该框架提供了一个合同来强制执行GetAdministrationInterface 方法
  • 创建一个重复 char n 次的编译时字符串

    我正在使用这样的函数将数据导出到 xml 文件中 注意 愚蠢的示例 void write xml file const std string path using namespace std string view literals Use
  • x86 中有加速 SHA (SHA1/2/256/512) 编码的指令吗?

    一个例子 在x86 是硬件加速 AES 的指令集 http en wikipedia org wiki AES instruction set 但是x86中是否有加速SHA SHA1 2 256 512 编码的指令 以及在x86上编码SHA
  • 实体框架 - SQL Server 2005 - IIS 服务器日期时间问题

    我正在使用 MVC3 和实体框架 在我的应用程序中 我需要通过 EF 调用 SQL Server 2005 中的存储过程来根据以下内容搜索一些数据datetime传递的参数 在当地环境中一切似乎都运行良好 但是将其托管到 IIS 后 我在尝
  • 当从字符串文字初始化 char 数组时会发生什么?

    据我了解 以下代码的工作原理如下 char cptr Hello World Hello World 住在 rodata程序内存的一部分 字符串文字 Hello World 返回一个指向字符串基地址的指针 或者所谓 数组 中第一个元素的地址
  • WP8.1:Cortana uri 关联?

    Cortana 是否有 uri 关联 或者从其他应用程序启动的其他方式 我已经尝试过了 await Launcher LaunchUriAsync new Uri cortana await Launcher LaunchUriAsync
  • 第一次机会异常 - 在内存位置长?

    这是什么 我该如何处理 修复它 First chance exception at 0x756fb727 in Program exe Microsoft C exception long at memory location 0x0018

随机推荐

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

    目前 我有一个带有验证码的脚本 该脚本在提交时记录用户的 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 使用率 可以我在代码中以编程方式限制这种用法 这肯定会让我能够在给定时间运行多个程序 谢谢