找回密码
 加入
搜索
查看: 6393|回复: 7

[AU3基础] [求助]AutoIT编译的EXE文件长时间运行占内存大[已解决]

  [复制链接]
发表于 2011-7-6 18:37:18 | 显示全部楼层 |阅读模式
本帖最后由 曼菲士 于 2013-3-23 10:55 编辑

写了个监测网络设备通断的软件,监测点大概是12个左右,监测点都是普通路由器,程序PING部分代码如下

Func _Ping($tIP, $tPingTimeOut)
        If FileExists(@SystemDir & "\ping.exe") Then
                Local $tmp1 = Run("ping " & $tIP & " -n 1 -w " & $tPingTimeOut, "", @SW_HIDE, 2)
                Sleep(64)
                Local $tmp2 = StdoutRead($tmp1)
                Local $tmp3 = StringRegExp($tmp2, "([0-9]*)ms TTL", 3)
                If @error Then
                        Return 0
                Else
                        Return $tmp3[0]
                EndIf
        Else
                Return Ping($tIP, $tPingTimeOut)
        EndIf
EndFunc


程序中使用了P大的内存时时优化代码
#include <Thread.au3>
_RTEmptyWorkingSet()

未使用前总内存下降速度很快,10分钟左右就只剩2%左右了,当使用P大公开的代码后3小时左右才会降到2%

当把
If FileExists(@SystemDir & "\ping.exe") Then
改为
If not FileExists(@SystemDir & "\ping.exe") Then
后,内存占用很少。

意思就是,调用外部Ping.exe时,运行时间越长总内存剩余越少,但AU3的进程占用内存依然只有几兆而已,退出这个进程后总内存恢复到正常值,如果是使用内部PING命令长时间运行不会造成内存明显下降,这个问题困扰了我好多天,至今无法解决,请各位同好支点招,谢谢。

我用论坛里秒PING的ASM代码解决这个问题,使用外部PING时,AU3并没有真正释放已结束的RUN,使用AU3自带PING命令又不按要求结束,对不存在的IP或已关闭的IP等待太久。
发表于 2011-7-7 01:09:58 | 显示全部楼层
这个问题我也遇到过,也不知道如何解决,同求解决方案
发表于 2011-7-7 01:51:05 | 显示全部楼层
调用外部Ping.exe时, 运行 时间 越长总内存剩余越少,但AU3的 进程 占用内存依然只有几兆而已

先查清楚,剩余的内存去了哪里
 楼主| 发表于 2011-7-7 17:24:32 | 显示全部楼层
用AutoIT内部PING在检测不存在的IP地址时太慢,会严重影响到程序运行速度。

试过检查调用过的PING.EXE句柄是否存在,结果是已关闭,但内存还是会被占用,非常郁闷,期待高手帮忙。
发表于 2011-7-26 23:59:02 | 显示全部楼层
值得关注。
是否 au3在等待ping的返回状态?
发表于 2011-7-27 23:26:52 | 显示全部楼层
看看是不是并发的太多啦
发表于 2014-5-2 15:38:58 | 显示全部楼层
我也想知道方法
发表于 2014-7-18 11:41:46 | 显示全部楼层
我也碰到这个问题,需用StdioClose来关闭。希望可以帮到解决,以下是帮助里的说明:
Closes all resources associated with a process previously run with STDIO redirection.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-29 09:53 , Processed in 0.214340 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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