找回密码
 加入
搜索
查看: 6043|回复: 21

[AU3基础] _FileListToArray函数占用CPU率高的问题【已解决】

[复制链接]
发表于 2018-7-20 10:22:15 | 显示全部楼层 |阅读模式
本帖最后由 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[0]
        If         StringInStr($ArrayFile[$i],"_",0,1,1,10) > 1 Then
                TrayTip("提示:","已检测到带有_文件名:" & $ArrayFile[$i],5,1)
        EndIf
Next
WEnd


发表于 2018-7-20 10:27:23 | 显示全部楼层
While 1
$ArrayFile = _FileListToArray("c:\test","*.log",1)
If @error Then ContinueLoop
for $i = 1 to $ArrayFile[0]
         If         StringInStr($ArrayFile[$i],"_",0,1,1,10) > 1 Then
                 TrayTip("提示:","已检测到带有_文件名:" & $ArrayFile[$i],5,1)
         EndIf
Next
SLEEP(10)
WEnd
 楼主| 发表于 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%左右。
发表于 2018-7-20 10:44:11 | 显示全部楼层
zhaoceshi 发表于 2018-7-20 10:35
刚想来说加了sleep(1000)也是一样占用25%左右。

加太多了 SLEEP1 或者10
 楼主| 发表于 2018-7-20 10:50:15 | 显示全部楼层
kk_lee69 发表于 2018-7-20 10:44
加太多了 SLEEP1 或者10

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

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

或者还有没有其他的函数能代替_FileListToArray ?
发表于 2018-7-20 10:52:13 | 显示全部楼层
zhaoceshi 发表于 2018-7-20 10:50
理论上不是延迟的越大,循环次数就会越少吗?

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

那你的問題 應該不出在這邊吧!!
 楼主| 发表于 2018-7-20 11:02:04 | 显示全部楼层
kk_lee69 发表于 2018-7-20 10:52
那你的問題 應該不出在這邊吧!!


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



加了10 變 0%

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2018-7-20 11:23:44 | 显示全部楼层
ContinueLoop …
Sleep 应加在循环上层:

While 1
Sleep(1000)
...

其次,效率浪费很大,至少应该直接使用 FileFindFirstFile,更佳的方式是监控目录。自行研究吧
 楼主| 发表于 2018-7-20 11:25:44 | 显示全部楼层
C:\Users\Administrator\Desktop\无标题.png
 楼主| 发表于 2018-7-20 11:26:52 | 显示全部楼层
额。。。我的依然是25% ,我重装au3看看。先多谢大佬了。。
 楼主| 发表于 2018-7-20 11:48:54 | 显示全部楼层
afan 发表于 2018-7-20 11:23
ContinueLoop …
Sleep 应加在循环上层:

好的。我研究看看这个函数怎么用。
发表于 2018-7-20 15:19:27 | 显示全部楼层
_FileListToArray 是我最常用的几个函数之一,能不能别一出问题就怪UDF不好?你的这个代码逻辑让脚本在短时间内执行了过多次,当然CPU占用大,和_FileListToArray的函数效率关系不大。外层While循环无非就是监听的间隔,你未设置任何监听间隔,而如果你恰巧Test目录下没有任何日志文件的话,就会在极短时间内执行NNN次_FileListToArray,就算是Hello word也会占用N高的CPU。
 楼主| 发表于 2018-7-20 17:07:24 | 显示全部楼层
受教了受教了,感谢各位大佬。问题已得到解决。

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


发表于 2018-7-21 09:55:11 | 显示全部楼层
把解决的代码共享一下呗
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 15:03 , Processed in 0.074488 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表