已解决 求助关于内存回收的问题
本帖最后由 iank 于 2012-4-7 12:43 编辑今天写了一个程序,同时运行这个程序5次,一开始还好,但是随着运行时间变长,程序占用的内存越来越多,最后导致全部占满,电脑卡死。。
分析了一下
比如类似这样的For $i = 1 To 1000000 Step 1
;省略一些一些乱七八糟的操作代码。。。。。。。。。。
$content = "非常长的字符串,比如一个大网页的源码。。。。。。。。。。。。。。。。。。。。。"& $i
;省略一些一些乱七八糟的操作代码。。。。。。。。。。
Next这种情况下每次循环保存的$content字符串会一直保存吗还是会自己回收掉?
如果一直保存,应该怎样释放上次循环使用的内存呢 同一变量多次赋值,内存中只存放最后一次的值 数量巨大的循环,建议加入容错代码。
Local $str = ""
Local $k=1
For $i = 1 To 1000000
If StringLen($str) >= 10000 Then
Local $hFile = FileOpen(@ScriptDir & "\temp"&$k, 1 + 8)
FileWrite($hFile, $str)
FileClose($hFile)
$str = ""
$k+=1
EndIf
$str &= Random(0, 1000, 1) & ","
Next
Local $hFile = FileOpen(@ScriptDir & "\temp", 1 + 8)
FileWrite($hFile, $str)
FileClose($hFile) 本帖最后由 iank 于 2012-4-5 09:25 编辑
回复 3# 3mile
多谢,看了你的代码我想我找到我程序出问题的原因了我在循环中使用了文件写入,但是我是这么写的 FileWrite("success.txt", $i & @CRLF)每次循环都没有将他关闭,所以我想是这个原因,3mile大神,我想的靠谱吗 回复 2# 298311657
多谢,学习啦 回复3mile
多谢,看了你的代码我想我找到我程序出问题的原因了我在循环中使用了文件写入,但 ...
iank 发表于 2012-4-5 09:23 http://www.autoitx.com/images/common/back.gif
跟这个无关,也跟你在一楼提的原因无关。这两处都不可能有内存侧漏
要想真正找原因,只有把你代码发上来,而不是你自认为的。若你想精减代码后发上来,至少得在你的机子,精减的代码能重现你在一楼说的问题。 回复 4# iank
我觉得靠谱,我有过类似的经历。
好像是无限次的使用UDPOpen函数但是没有使用UDPShutdown函数,结果在任务管理器看到这个进程的使用内存一点一点地增大,导致最后电脑当机了,楼主可以用fileclose函数看看是不是好了? 回复 6# happytc
{:face (316):} 多谢大神提醒 上午时已经解决了 确实不是因为文件没关闭或者变量没释放
真正的原因在
我用的是嵌入的ie,本机是ie9, 之前为了少占流量,把ie里设置成了关闭图片显示。
然后我把图片显示打开,一切ok!~
具体原因为啥我也不晓得,反正现在运行正常就好啦。。 回复 8# xms77 {:face (303):} 我不是这个问题引起的是浏览器设置的问题,把图片设置成开启显示后 程序跑的那就一个顺畅啊 好像吃了泻药一样的 回复 10# iank
恭喜楼主解决问题,还请楼主给标题加上“已解决”。 好像吃了泻药一样的
!!!!!!!!!!!!!!!!!!!!!!!!!!{:face (411):}
页:
[1]