导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
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最强. 写自己的代码, 让别人去运行.
作者:
2021/10/25 15:27:06
1楼:
一直在做硬盘操作,占用怎么会不高,这么做的意义何在?没必要这么频繁搜索硬盘的
----------------------------------------------
-
作者:
lsuper (lsuper)
★☆☆☆☆
-
盒子活跃会员
2021/10/25 15:40:08
2楼:
1、主动让开 cpu,增加 sleep(200) 之类的 2、或者,要监控目录变化用 Thread 的 ReadDirectoryChanges+WaitForMultipleObjects
----------------------------------------------
-
作者:
2021/10/25 15:44:46
2楼:
这堆代码一刻不停地在跑循环,没把 CPU 占到100%算不错了。
----------------------------------------------
-
作者:
2021/10/25 16:19:54
3楼:
@hguhgu (满汉全席) 界面每5秒给我传了1万多文件list给我, 我只有循环判断文件是否存在.. 界面的人说不需要判断, 我说必须判断, 否则问题很大. 烦.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/25 16:20:33
4楼:
@pcplayer 一个万个文件list, 不是循环一万次判断是否存在? 有错?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/25 16:34:54
5楼:
可以用FindFirst/FindNext
----------------------------------------------
-
作者:
2021/10/25 16:51:04
6楼:
@tuesdays 传入得List存一个队列 另开多个线程 处理。这样才是合理得安排
----------------------------------------------
-
作者:
2021/10/25 17:01:20
7楼:
建议采用2楼的做法
----------------------------------------------
-
作者:
2021/10/25 17:07:10
7楼:
LZ的代码是连续10000次判断各种文件(10000个?)是否存在。 看说法应该是大概每5秒判断一次,传入的10000个文件是否存在呀?
----------------------------------------------
Bye bye DDRFAN...
作者:
2021/10/25 17:08:15
8楼:
界面哪来的10000个文件,肯定不是键盘敲的对吧,肯定是从某个列表提取的对吧,那就在生成那个列表的时候就过滤掉不存在的文件不就可以了
----------------------------------------------
-
作者:
2021/10/25 17:45:08
9楼:
@roadrunner (roadrunner) 上层也让我不要判断了, 可程序跑起来, 到底层又会报错, 底层说它不可能判断文件是否存在. 一共三层, 我在中间, 收到10000条文件, 烦死我了, 怎么搞都不行.. 不判断底层骂我. 判断软件卡死.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/25 17:48:38
10楼:
@ddrfan (若苗瞬) 是的, list中有些记录被更新了, 有些还是旧的, 但我想着尽量都判断一次, 稳妥. 就卡死了.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/25 19:17:06
11楼:
楼主的问题: 1. 如果真有那么多活,必须在限定的时间里面干完,就不要嫌 CPU 占用高。如果活多,可能你上一个 64核的 CPU 也会给你占满。如果不限定时间,只要把时间拉长,同样多的活,CPU 占用就降低了。所谓的把时间拉长,就是在循环里面加 Sleep;很多大循环,必须在里面加 Sleep 否则循环一跑,CPU 可能占用到 100%。 楼主的代码,如果不限制完成时间,只要加上 Sleep(100) 就马上 CPU 降下来。
----------------------------------------------
-
作者:
2021/10/25 19:22:52
12楼:
2. 写了一大段,提交就说有非法字符。没法玩了。 3. 一个大循环,至于要不要放到某个线程里面去跑,其实只看一件事情:是否会阻塞主线程,让界面冻结,带来不好的用户体验。如果有这种情况,那就单独做一个线程去跑它。
----------------------------------------------
-
作者:
2021/10/29 9:31:03
13楼:
这个不是很简单吗? 既然每5秒才传,那你就找一下有没有文件,没有就sleep(1000),有就接着处理。 因为你那还有个application.processmessages() ; 那就把这些代码都放到独立线程就行了,不要堵塞主线程。 不知道我有没有理解错
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
2021/10/29 9:52:07
14楼:
@ hawke2e (hawke2e) sleep(1000)? 10000次, 那不是几个小时才返回? 每5秒执行一次呢..
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2021/10/29 10:19:13
15楼:
没看懂你说的是什么情况,不过感觉就是个初级的技术问题。 楼上,比如2楼说,或者 其他说的独立线程,能不能解决? 不能的话,那可能确实需要占15%,换CPU? 要底层的闭嘴? 反正,我看不出这问题有什么讨论价值。
----------------------------------------------
软件是什么,相信很多人都说不清。
作者:
2021/11/3 10:35:46
16楼:
JVCL 控件库中有一个: JvChangeNotify,可以被动检查文件夹或文件的变更,效率应该更高。
----------------------------------------------
-