zhaoceshi 发表于 2018-7-20 10:22:15

_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


kk_lee69 发表于 2018-7-20 10:27:23

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

zhaoceshi 发表于 2018-7-20 10:35:00

kk_lee69 发表于 2018-7-20 10:27
While 1
$ArrayFile = _FileListToArray("c:\test","*.log",1)
If @error Then ContinueLoop


刚想来说加了sleep(1000)也是一样占用25%左右。

kk_lee69 发表于 2018-7-20 10:44:11

zhaoceshi 发表于 2018-7-20 10:35
刚想来说加了sleep(1000)也是一样占用25%左右。

加太多了 SLEEP1 或者10

zhaoceshi 发表于 2018-7-20 10:50:15

kk_lee69 发表于 2018-7-20 10:44
加太多了 SLEEP1 或者10

理论上不是延迟的越大,循环次数就会越少吗?

刚才也试过sleep(1)和(10)。占用率还是保持在25%

或者还有没有其他的函数能代替_FileListToArray ?

kk_lee69 发表于 2018-7-20 10:52:13

zhaoceshi 发表于 2018-7-20 10:50
理论上不是延迟的越大,循环次数就会越少吗?

刚才也试过sleep(1)和(10)。占用率还是保持在25%


那你的問題 應該不出在這邊吧!!

zhaoceshi 发表于 2018-7-20 11:02:04

kk_lee69 发表于 2018-7-20 10:52
那你的問題 應該不出在這邊吧!!


大佬你可以运行我的代码看看,是不是CPU占用率是不是在25%左右。我试了几台机都会这样的情况

kk_lee69 发表于 2018-7-20 11:11:24

zhaoceshi 发表于 2018-7-20 11:02
大佬你可以运行我的代码看看,是不是CPU占用率是不是在25%左右。我试了几台机都会这样的情况



加了10 變 0%

afan 发表于 2018-7-20 11:23:44

ContinueLoop …
Sleep 应加在循环上层:

While 1
Sleep(1000)
...

其次,效率浪费很大,至少应该直接使用 FileFindFirstFile,更佳的方式是监控目录。自行研究吧

zhaoceshi 发表于 2018-7-20 11:25:44

C:\Users\Administrator\Desktop\无标题.png

zhaoceshi 发表于 2018-7-20 11:26:52

额。。。我的依然是25% ,我重装au3看看。先多谢大佬了。。

zhaoceshi 发表于 2018-7-20 11:48:54

afan 发表于 2018-7-20 11:23
ContinueLoop …
Sleep 应加在循环上层:



好的。我研究看看这个函数怎么用。

skyfree 发表于 2018-7-20 15:19:27

_FileListToArray 是我最常用的几个函数之一,能不能别一出问题就怪UDF不好?你的这个代码逻辑让脚本在短时间内执行了过多次,当然CPU占用大,和_FileListToArray的函数效率关系不大。外层While循环无非就是监听的间隔,你未设置任何监听间隔,而如果你恰巧Test目录下没有任何日志文件的话,就会在极短时间内执行NNN次_FileListToArray,就算是Hello word也会占用N高的CPU。

zhaoceshi 发表于 2018-7-20 17:07:24

受教了受教了,感谢各位大佬。问题已得到解决。

不知道是不是我本身环境问题,sleep加在while结尾是不行的,要加在顶层。(有时思路反转很重要。)


xz00311 发表于 2018-7-21 09:55:11

把解决的代码共享一下呗
页: [1] 2
查看完整版本: _FileListToArray函数占用CPU率高的问题【已解决】