我的脚本运行之后,它占用的内存为什么越来越大呢 ?
本帖最后由 newester 于 2009-6-27 00:00 编辑我的脚本运行之后,它 ( _IECreate 创建的iexplore.exe ) 占用的内存为什么越来越大呢 ? 我运行一段时间后,内存占用竟然达到500多M,而且还在随着时间增长而增加,晕,谁告诉我,谢谢了。
(功能是自动下载Discuz论坛某版块某些页面的用户头像 )脚本内容如下:
#include <IE.au3>
$oIE = _IECreate ("www.baidu.com",0,1)
For $num = 1 to 100
;___________________________________________________________________
_IENavigate ($oIE,"http://www.discuz.net/forum-73-"&$num&".html")
$sHTML = _IEBodyReadHTML ($oIE)
$xArray = StringSplit($sHTML,'space.php?uid=',1)
For $i = 0 to UBound($xArray)-1
If $i < 2 Then ContinueLoop
$sID = StringLeft($xArray[$i],(StringInStr($xArray[$i], '"')-1))
_IENavigate ($oIE, "http://www.discuz.net/space.php?uid="&$sID)
;---------------------------------------------------------------------------
$sHTML = _IEBodyReadHTML ($oIE)
if ( StringInStr($sHTML, "您所在的用户组(Guest)无法进行此操作")>0 ) then
$oForm=_IEFormGetObjByName ($oIE, "login")
$oTexta =_IEFormElementGetObjByName ($oForm, "username")
_IEFormElementSetValue ($oTexta, "登陆用户名")
$oTextb =_IEFormElementGetObjByName ($oForm, "password")
_IEFormElementSetValue ($oTextb, "登陆密码")
_IEFormElementCheckboxSelect ($oForm, "2592000", "cookietime", 1, "byValue")
$o_login = _IEFormElementGetObjByName ($oForm, "loginsubmit")
_IEAction ($o_login, "click")
sleep(2000)
_IENavigate ($oIE, "http://www.discuz.net/space.php?uid="&$sID)
$sHTML = _IEBodyReadHTML ($oIE)
endif
;-----------------------------------------------------------------------------------------------
if ( StringInStr($sHTML, "data/avatar")>0 ) then
$tmp= StringSplit($sHTML,'http://www.discuz.net/uc_server/data/',1)
;MsgBox(0, "Array :", UBound($tmp)&"_______________"&$tmp)
$sIMG = StringLeft($tmp,(StringInStr($tmp, '<ul id=profile_act>')-1))
$tmp= StringSplit($sIMG,'">',1)
$sIMG = $tmp
;MsgBox(0, "Src:", $sIMG)
$tmp=StringSplit($sIMG,'/',1)
$sName=$tmp
;MsgBox(0, "Name:", $sName)
If FileExists(@ScriptDir&"\"&$sName) Then
Else
InetGet("http://www.discuz.net/uc_server/data/"&$sIMG,@ScriptDir&"\"&$sName)
EndIf
endif
Next
;___________________________________________________________________
Next 如果不断循环执行,还是加上sleep(500)
休眠一下 2# l4ever
我试试看 ... :face (22): 2# l4ever
不行,不是 Sleep(xxxx) 的问题噢,刚测试了,估计是什么东东用过后没释放内存 ... 一直累加 偶顶起 ... :face (30): _IENavigate会把之前浏览的页面缓存,所以内存占用越来越大
这个问题我也遇到暂未解决,找了个折衷的方法是先_IEQuit()再_IECreate() 6# passkalilo
嗯,我试试,打算用这个方法了
:face (27): 这个怎么用啊!!! _ReduceMemory($i_PID = -1);<==释放内存函数 楼上你这个函数在哪个库里? 10# tisiem
这不是函数库 ;===============ReduceMemory==========================
Func _ReduceMemory($i_PID = -1)
If $i_PID <> -1 Then
Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
Else
Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return
EndFunc ;==>_ReduceMemory
用一下这个。
页:
[1]