newester 发表于 2009-6-23 11:07:07

我的脚本运行之后,它占用的内存为什么越来越大呢 ?

本帖最后由 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

l4ever 发表于 2009-6-23 13:49:10

如果不断循环执行,还是加上sleep(500)
休眠一下

newester 发表于 2009-6-23 14:12:51

2# l4ever

我试试看 ... :face (22):

newester 发表于 2009-6-23 14:45:46

2# l4ever

不行,不是 Sleep(xxxx) 的问题噢,刚测试了,估计是什么东东用过后没释放内存 ... 一直累加

newester 发表于 2009-6-23 23:57:12

偶顶起 ... :face (30):

passkalilo 发表于 2009-6-24 11:01:48

_IENavigate会把之前浏览的页面缓存,所以内存占用越来越大
这个问题我也遇到暂未解决,找了个折衷的方法是先_IEQuit()再_IECreate()

newester 发表于 2009-6-26 23:33:12

6# passkalilo

嗯,我试试,打算用这个方法了
:face (27):

skycn540 发表于 2009-6-27 09:04:22

这个怎么用啊!!!

menfan1 发表于 2009-6-27 09:23:26

_ReduceMemory($i_PID = -1);<==释放内存函数

tisiem 发表于 2009-7-4 21:36:34

楼上你这个函数在哪个库里?

kn007 发表于 2009-7-4 21:55:35

10# tisiem


这不是函数库

figons 发表于 2010-1-26 19:45:50

;===============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]
查看完整版本: 我的脚本运行之后,它占用的内存为什么越来越大呢 ?