_FileListToArray函数占用CPU率高的问题【已解决】
本帖最后由 zhaoceshi 于 2018-7-20 17:07 编辑写了一个检测某个文件夹下是否存在*。log的代码,但是发现运行后,会占用比较高的CPU使用率,一直保持在25%左右。
请教大神们怎么优化此代码。
#include <File.au3>
While 1
$ArrayFile = _FileListToArray("c:\test","*.log",1)
If @error Then ContinueLoop
for $i = 1 to $ArrayFile
If StringInStr($ArrayFile[$i],"_",0,1,1,10) > 1 Then
TrayTip("提示:","已检测到带有_文件名:" & $ArrayFile[$i],5,1)
EndIf
Next
WEnd
While 1
$ArrayFile = _FileListToArray("c:\test","*.log",1)
If @error Then ContinueLoop
for $i = 1 to $ArrayFile
If StringInStr($ArrayFile[$i],"_",0,1,1,10) > 1 Then
TrayTip("提示:","已检测到带有_文件名:" & $ArrayFile[$i],5,1)
EndIf
Next
SLEEP(10)
WEnd kk_lee69 发表于 2018-7-20 10:27
While 1
$ArrayFile = _FileListToArray("c:\test","*.log",1)
If @error Then ContinueLoop
刚想来说加了sleep(1000)也是一样占用25%左右。 zhaoceshi 发表于 2018-7-20 10:35
刚想来说加了sleep(1000)也是一样占用25%左右。
加太多了 SLEEP1 或者10 kk_lee69 发表于 2018-7-20 10:44
加太多了 SLEEP1 或者10
理论上不是延迟的越大,循环次数就会越少吗?
刚才也试过sleep(1)和(10)。占用率还是保持在25%
或者还有没有其他的函数能代替_FileListToArray ? zhaoceshi 发表于 2018-7-20 10:50
理论上不是延迟的越大,循环次数就会越少吗?
刚才也试过sleep(1)和(10)。占用率还是保持在25%
那你的問題 應該不出在這邊吧!! kk_lee69 发表于 2018-7-20 10:52
那你的問題 應該不出在這邊吧!!
大佬你可以运行我的代码看看,是不是CPU占用率是不是在25%左右。我试了几台机都会这样的情况 zhaoceshi 发表于 2018-7-20 11:02
大佬你可以运行我的代码看看,是不是CPU占用率是不是在25%左右。我试了几台机都会这样的情况
加了10 變 0%
ContinueLoop …
Sleep 应加在循环上层:
While 1
Sleep(1000)
...
其次,效率浪费很大,至少应该直接使用 FileFindFirstFile,更佳的方式是监控目录。自行研究吧 C:\Users\Administrator\Desktop\无标题.png 额。。。我的依然是25% ,我重装au3看看。先多谢大佬了。。 afan 发表于 2018-7-20 11:23
ContinueLoop …
Sleep 应加在循环上层:
好的。我研究看看这个函数怎么用。 _FileListToArray 是我最常用的几个函数之一,能不能别一出问题就怪UDF不好?你的这个代码逻辑让脚本在短时间内执行了过多次,当然CPU占用大,和_FileListToArray的函数效率关系不大。外层While循环无非就是监听的间隔,你未设置任何监听间隔,而如果你恰巧Test目录下没有任何日志文件的话,就会在极短时间内执行NNN次_FileListToArray,就算是Hello word也会占用N高的CPU。 受教了受教了,感谢各位大佬。问题已得到解决。
不知道是不是我本身环境问题,sleep加在while结尾是不行的,要加在顶层。(有时思路反转很重要。)
把解决的代码共享一下呗
页:
[1]
2