var
i,j:integer;
for i:=memo1.lines.count-1 downto 0 do
begin
for j:=i-1 downto 0 do
begin
if comparestr(memo1.lines.strings[i],memo1.lines.strings[j])=0 then
begin
memo1.lines.delete(i);
break;
end;
end;
end;
用这个For循环,如果去重复字符串多的话..一直循环,占用CPU100%,速度很慢,请问怎么才能去一个重复字符串后释放一下CPU呢.或者让CPU不到100%..多线程应该可以吧?可是现在学的是基础,还不会.请哪位高手老师指导一下解决这个的方法
sleep(10)
application.ProcessMessages
这两个我都用了!再处理小的字符串时CPU还算可以..
但是.处理上1000的字符串的话...慢慢的CPU使用率就很高了
最后导致程序运行也慢了.!
Delphi For循环占用CPU100%释放问题
答案:4 悬赏:10 手机版
解决时间 2021-02-19 11:08
- 提问者网友:暗中人
- 2021-02-18 16:03
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-02-18 17:28
什么代码都没用,CPU占用是windows在分配,与delphi无关,application.processmessage只是处理其他事件而已,cpu同样会占用很高。
无论是用线程还是什么,只要你的cpu闲置,windows就会考虑尽快用更多的cpu将你的指令执行完毕。
唯一的方法是调低自己的程序优先级,将自己降低,但是这也不保证就不占用cpu时间。
所以你不能考虑cpu占用,只需要考虑你的程序在执行大量代码的时候不会阻塞运行就行了。cpu占用你没法调整。
另外,楼上说的强制将代码循环停滞也是一种方法,不过这个就慢了,本来1秒钟可以计算出来的要分成几十秒钟来算了。
无论是用线程还是什么,只要你的cpu闲置,windows就会考虑尽快用更多的cpu将你的指令执行完毕。
唯一的方法是调低自己的程序优先级,将自己降低,但是这也不保证就不占用cpu时间。
所以你不能考虑cpu占用,只需要考虑你的程序在执行大量代码的时候不会阻塞运行就行了。cpu占用你没法调整。
另外,楼上说的强制将代码循环停滞也是一种方法,不过这个就慢了,本来1秒钟可以计算出来的要分成几十秒钟来算了。
全部回答
- 1楼网友:青尢
- 2021-02-18 19:04
喔,想想
- 2楼网友:往事隔山水
- 2021-02-18 18:59
那再加一句休眠看下
sleep(10);
application.ProcessMessages;
我也不想多说啦
- 3楼网友:千夜
- 2021-02-18 18:40
关掉不用的自启动项
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯