永发信息网

Delphi For循环占用CPU100%释放问题

答案:4  悬赏:10  手机版
解决时间 2021-02-19 11:08
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使用率就很高了
最后导致程序运行也慢了.!
最佳答案
什么代码都没用,CPU占用是windows在分配,与delphi无关,application.processmessage只是处理其他事件而已,cpu同样会占用很高。

无论是用线程还是什么,只要你的cpu闲置,windows就会考虑尽快用更多的cpu将你的指令执行完毕。

唯一的方法是调低自己的程序优先级,将自己降低,但是这也不保证就不占用cpu时间。

所以你不能考虑cpu占用,只需要考虑你的程序在执行大量代码的时候不会阻塞运行就行了。cpu占用你没法调整。

另外,楼上说的强制将代码循环停滞也是一种方法,不过这个就慢了,本来1秒钟可以计算出来的要分成几十秒钟来算了。
全部回答
喔,想想
那再加一句休眠看下 sleep(10); application.ProcessMessages; 我也不想多说啦
关掉不用的自启动项
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
爱丽丝营养家园怎么去啊,有知道地址的么
世界上真的有电视剧《神雕侠侣》里的古墓吗?
广州旧水坑哪里有公交卡卖 买什么卡好 有优惠
谁还记得这个令人发指的案子
【事业编警察】社区工作者和事业编警察做哪个
双泉村在什么地方啊,我要过去处理事情
exo cbx 日版专辑girls 的音源在哪个app听啊
固醇属于生物大分子吗?
胃舒平药片中三氧化二铝和氧化镁含量的测定的
转转吧地址在哪,我要去那里办事
新捷达侧裙凹陷钣金后,侧裙内部怎么防锈
春日的诗意
“十二五”规划纲要提出扩大内陆开放,积极承
l986年生2015与年虚岁是多少
竹园坡村在哪里啊,我有事要去这个地方
推荐资讯
诗僧是谁
东洞庭湖小区(北门)地址在什么地方,想过去办
赵州桥课标要求是什么
魔影工厂 刻录DVD 原大小2.59G 的12集电视剧
图中A、B、C、D四地位于同一纬度,据此回答12
公司担保 能办大额信用卡吗?
你好,已经过了15号忘记反写怎么办
小说快捕自助书城里的简介怎么都是乱码?
越王史迹我想知道这个在什么地方
金长馆与金长馆与金长馆中金长馆什么时候笑了
中国移动博才通讯指定专营店地址在哪,我要去
小学一年级有一个题,就给了一句话: “在一
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?