曼菲士 发表于 2011-7-6 18:37:18

[求助]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等待太久。

papapa314 发表于 2011-7-7 01:09:58

这个问题我也遇到过,也不知道如何解决,同求解决方案

annybaby 发表于 2011-7-7 01:51:05

调用外部Ping.exe时, 运行 时间 越长总内存剩余越少,但AU3的 进程 占用内存依然只有几兆而已

先查清楚,剩余的内存去了哪里

曼菲士 发表于 2011-7-7 17:24:32

用AutoIT内部PING在检测不存在的IP地址时太慢,会严重影响到程序运行速度。

试过检查调用过的PING.EXE句柄是否存在,结果是已关闭,但内存还是会被占用,非常郁闷,期待高手帮忙。

ghl781258 发表于 2011-7-26 23:59:02

值得关注。
是否 au3在等待ping的返回状态?

xz00311 发表于 2011-7-27 23:26:52

看看是不是并发的太多啦

jkq920 发表于 2014-5-2 15:38:58

我也想知道方法

citrixyz 发表于 2014-7-18 11:41:46

我也碰到这个问题,需用StdioClose来关闭。希望可以帮到解决,以下是帮助里的说明:
Closes all resources associated with a process previously run with STDIO redirection.
页: [1]
查看完整版本: [求助]AutoIT编译的EXE文件长时间运行占内存大[已解决]