DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 12
在线用户: 30
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/25 13:34:54
标题:
占用cpu高是怎么回事?  高达15%的cpu 浏览:1661
加入我的收藏
楼主: 其它上没做什么事. 怎么解决? 

 for I := 0 to 10000 do begin
     Application.ProcessMessages;
     if DirectoryExists('') then begin
     end;
     if  FileExists('???534') then begin
     end;
    if DirectoryExists('C:\中原') then begin
    end;
     if DirectoryExists('#@?') then begin

     end;
 end;
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hguhgu (满汉全席) ★☆☆☆☆ -
普通会员
2021/10/25 15:27:06
1楼: 一直在做硬盘操作,占用怎么会不高,这么做的意义何在?没必要这么频繁搜索硬盘的
----------------------------------------------
-
作者:
男 lsuper (lsuper) ★☆☆☆☆ -
盒子活跃会员
2021/10/25 15:40:08
2楼: 1、主动让开 cpu,增加 sleep(200) 之类的
2、或者,要监控目录变化用 Thread 的 ReadDirectoryChanges+WaitForMultipleObjects
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/25 15:44:46
2楼: 这堆代码一刻不停地在跑循环,没把 CPU 占到100%算不错了。
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/25 16:19:54
3楼: @hguhgu (满汉全席)

界面每5秒给我传了1万多文件list给我, 我只有循环判断文件是否存在.. 
界面的人说不需要判断, 我说必须判断, 否则问题很大.  烦.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/25 16:20:33
4楼: @pcplayer

一个万个文件list, 不是循环一万次判断是否存在?  有错?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hguhgu (满汉全席) ★☆☆☆☆ -
普通会员
2021/10/25 16:34:54
5楼: 可以用FindFirst/FindNext
----------------------------------------------
-
作者:
男 xiaobaosoft (小宝软件) ▲▲△△△ -
普通会员
2021/10/25 16:51:04
6楼: @tuesdays

传入得List存一个队列

另开多个线程 处理。这样才是合理得安排
----------------------------------------------
-
作者:
男 teclick (nelson) ★☆☆☆☆ -
普通会员
2021/10/25 17:01:20
7楼: 建议采用2楼的做法
----------------------------------------------
-
作者:
男 ddrfan (若苗瞬) ▲▲▲▲▲ -
普通会员
2021/10/25 17:07:10
7楼: LZ的代码是连续10000次判断各种文件(10000个?)是否存在。
看说法应该是大概每5秒判断一次,传入的10000个文件是否存在呀?
----------------------------------------------
Bye bye DDRFAN...
作者:
男 roadrunner (roadrunner) ★☆☆☆☆ -
盒子活跃会员
2021/10/25 17:08:15
8楼: 界面哪来的10000个文件,肯定不是键盘敲的对吧,肯定是从某个列表提取的对吧,那就在生成那个列表的时候就过滤掉不存在的文件不就可以了
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/25 17:45:08
9楼: @roadrunner (roadrunner)

上层也让我不要判断了, 可程序跑起来, 到底层又会报错, 底层说它不可能判断文件是否存在. 

一共三层, 我在中间, 收到10000条文件, 烦死我了, 怎么搞都不行.. 不判断底层骂我. 判断软件卡死.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/25 17:48:38
10楼: @ddrfan (若苗瞬)
是的, list中有些记录被更新了, 有些还是旧的, 但我想着尽量都判断一次, 稳妥. 

就卡死了.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/25 19:17:06
11楼: 楼主的问题:

1. 如果真有那么多活,必须在限定的时间里面干完,就不要嫌 CPU 占用高。如果活多,可能你上一个 64核的 CPU 也会给你占满。如果不限定时间,只要把时间拉长,同样多的活,CPU 占用就降低了。所谓的把时间拉长,就是在循环里面加 Sleep;很多大循环,必须在里面加 Sleep 否则循环一跑,CPU 可能占用到 100%。

楼主的代码,如果不限制完成时间,只要加上 Sleep(100) 就马上 CPU 降下来。
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2021/10/25 19:22:52
12楼: 2. 写了一大段,提交就说有非法字符。没法玩了。

3. 一个大循环,至于要不要放到某个线程里面去跑,其实只看一件事情:是否会阻塞主线程,让界面冻结,带来不好的用户体验。如果有这种情况,那就单独做一个线程去跑它。
----------------------------------------------
-
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2021/10/29 9:31:03
13楼: 这个不是很简单吗?
既然每5秒才传,那你就找一下有没有文件,没有就sleep(1000),有就接着处理。
因为你那还有个application.processmessages() ;
那就把这些代码都放到独立线程就行了,不要堵塞主线程。
不知道我有没有理解错
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2021/10/29 9:52:07
14楼: @ hawke2e (hawke2e)
sleep(1000)?  10000次,  那不是几个小时才返回? 每5秒执行一次呢..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hawke2e (hawke2e) ★☆☆☆☆ -
普通会员
2021/10/29 10:19:13
15楼: 没看懂你说的是什么情况,不过感觉就是个初级的技术问题。
楼上,比如2楼说,或者 其他说的独立线程,能不能解决?
不能的话,那可能确实需要占15%,换CPU? 要底层的闭嘴?
反正,我看不出这问题有什么讨论价值。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
男 net1999 (好人) ★☆☆☆☆ -
普通会员
2021/11/3 10:35:46
16楼: JVCL 控件库中有一个: JvChangeNotify,可以被动检查文件夹或文件的变更,效率应该更高。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行681.6406毫秒 RSS