[求助]AutoIT编译的EXE文件长时间运行占内存大[已解决]
本帖最后由 曼菲士 于 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, "(*)ms TTL", 3)
If @error Then
Return 0
Else
Return $tmp3
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等待太久。 这个问题我也遇到过,也不知道如何解决,同求解决方案 调用外部Ping.exe时, 运行 时间 越长总内存剩余越少,但AU3的 进程 占用内存依然只有几兆而已
先查清楚,剩余的内存去了哪里 用AutoIT内部PING在检测不存在的IP地址时太慢,会严重影响到程序运行速度。
试过检查调用过的PING.EXE句柄是否存在,结果是已关闭,但内存还是会被占用,非常郁闷,期待高手帮忙。 值得关注。
是否 au3在等待ping的返回状态? 看看是不是并发的太多啦 我也想知道方法 我也碰到这个问题,需用StdioClose来关闭。希望可以帮到解决,以下是帮助里的说明:
Closes all resources associated with a process previously run with STDIO redirection.
页:
[1]