|
本帖最后由 曼菲士 于 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等待太久。 |
|