解决cpu占用率过高的问题
来源:互联网 发布:网件访客网络 编辑:程序博客网 时间:2024/04/29 10:39
以下是从百度知道转回来的:
什么代码都没用,CPU占用是windows在分配,与delphi无关,application.processmessage只是处理其他事件而已,cpu同样会占用很高。
无论是用线程还是什么,只要你的cpu闲置,windows就会考虑尽快用更多的cpu将你的指令执行完毕。
唯一的方法是调低自己的程序优先级,将自己降低,但是这也不保证就不占用cpu时间。
所以你不能考虑cpu占用,只需要考虑你的程序在执行大量代码的时候不会阻塞运行就行了。cpu占用你没法调整。
另外,楼上说的强制将代码循环停滞也是一种方法,不过这个就慢了,本来1秒钟可以计算出来的要分成几十秒钟来算了。
以下是从盒子论坛转载过来的:
线程轮询串口数据, cpu占用率过高(60-99), 但我在每次查询串口操作后都用了sleep, 从1000, 到10000ms, 变化都不大. 于是想到可能是查询串口的函数本身的问题, 于是trace进入,发现
repeat
//sleep(10);
until (GetTickCount-TickTime>=5000) or (aCPort.InputCount=5);
原来是没有sleep(10)的, 所以等待数据的5秒钟内,都没有休息, 加上10ms的休息后,效果就很好
后来进一步降低到2ms, 效果也很好( cpu占用率从60以上 降到 0-2)
如果把sleep换成application.ProcessMessages; 则作用不大, 原因还等待研究
得出的一个启示:
用于降低cpu占用率的sleep语句中休眠的时长不需要很大,通常在循环中每次Sleep(2)足够了
问题处在处理过于集中。在Sleep()之前执行了大量的分析操作,所以Sleep没有起到该有的作用
改进方式,将工作量均衡。不要在忙的时候不停,在清闲的时候不动弹
比如一趟处理过程, 原来在最后完成时sleep(100), 改为分散在过程中多处sleep(10)
- 解决CPU占用率过高的问题
- 解决cpu占用率过高的问题
- IIS解决CPU和内存占用率过高的问题
- 分析CPU占用率过高的问题
- 怎样通过iisapp命令查找pid来解决IIS的cpu占用率过高问题
- 关于win8系统开机后cpu占用率过高的问题
- oprofile定位CPU占用率过高的异常问题
- 解决Fedora tracker-sotre CPU占用率过高
- java 应用 cpu 占用率过高问题
- win10 cpu占用率过高的解决办法
- Windows CPU占用率过高
- 解决XP中CPU占用率过高问题, 关了445这个端口(ZT)
- 关于程序出现cpu占用过高的问题排查、解决办法以及避免代码中出现cpu占用率过高
- thttpd服务器在时间修改后导致CPU占用率过高的问题
- 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
- [转] thttpd服务器在时间修改后导致CPU占用率过高的问题
- 记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
- JVM FULL GC太频繁,CPU占用率过高问题
- 用SSL实现WEB服务器的安全性
- process memory segment on linux
- 程序人生-我已经努力了七年(转载)
- ISaveAs.SaveAs Method
- backtrack 4 in virtualBox 联网
- 解决cpu占用率过高的问题
- 获取当前的输入法状态
- [内容有自己写的也有看别人的觉得有感觉然后粘贴过来的,非纯原创] 最近心得
- Flex中处理带命名空间的XML
- WORD排版-目录管理/标题排版
- S3C2440交叉编译---crosstool
- 使用GDI+读取常用位图格式
- 装了db2恢复Administrator用户
- java程序执行流程、与虚拟机的关系