找回密码
 加入
搜索
查看: 2212|回复: 11

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

[复制链接]
发表于 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[2] :", UBound($tmp)&"_______________"&$tmp[2])

        $sIMG = StringLeft($tmp[2],(StringInStr($tmp[2], '<ul id=profile_act>')-1))
        $tmp  = StringSplit($sIMG,'">',1)
        $sIMG = $tmp[1]

        ;MsgBox(0, "Src:", $sIMG)
        
        $tmp=StringSplit($sIMG,'/',1)
        $sName=$tmp[5]

        ;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
发表于 2009-6-23 13:49:10 | 显示全部楼层
如果不断循环执行,还是加上sleep(500)
休眠一下
 楼主| 发表于 2009-6-23 14:12:51 | 显示全部楼层
2# l4ever

我试试看 ...
 楼主| 发表于 2009-6-23 14:45:46 | 显示全部楼层
2# l4ever

不行,不是 Sleep(xxxx) 的问题噢,刚测试了,估计是什么东东用过后没释放内存 ... 一直累加
 楼主| 发表于 2009-6-23 23:57:12 | 显示全部楼层
偶顶起 ...
发表于 2009-6-24 11:01:48 | 显示全部楼层
_IENavigate会把之前浏览的页面缓存,所以内存占用越来越大
这个问题我也遇到暂未解决,找了个折衷的方法是先_IEQuit()再_IECreate()
 楼主| 发表于 2009-6-26 23:33:12 | 显示全部楼层
6# passkalilo

嗯,我试试,打算用这个方法了
发表于 2009-6-27 09:04:22 | 显示全部楼层
这个怎么用啊!!!
发表于 2009-6-27 09:23:26 | 显示全部楼层
_ReduceMemory($i_PID = -1)  ;<==释放内存函数
发表于 2009-7-4 21:36:34 | 显示全部楼层
楼上你这个函数在哪个库里?
发表于 2009-7-4 21:55:35 | 显示全部楼层
10# tisiem


这不是函数库
发表于 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[0])
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf

        Return $ai_Return[0]
EndFunc   ;==>_ReduceMemory

用一下这个。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 02:11 , Processed in 0.081980 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表