搜索
aardio官方社区 门户 查看主题

打开多个web页面内存过高可行性解决方案

发布者: carl | 发布时间: 2011-5-13 13:49| 查看数: 15939| 评论数: 24|帖子模式


import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; right=349;text="aardio Form";bottom=249 )
winform.add(
richedit={ bottom=238;text=
"";left=12;multiline=1;top=99;font=LOGFONT( name="宋体";h=-12 );z=5;right=306;edge=1;cls="richedit" };
edit={ bottom=44;right=300;left=49;top=21;font=LOGFONT( name=
"宋体";h=-12 );z=3;text="bbs.aardio.com";edge=1;cls="edit" };
button={ bottom=89;right=301;left=187;top=50;font=LOGFONT( name=
"宋体";h=-12 );z=2;text="打开网页";cls="button" };
static={ text=
"网址:";bottom=44;right=55;left=14;top=24;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=1;cls="static" };
static2={ text=
"打开数量:";bottom=79;right=76;left=10;top=58;font=LOGFONT( name="宋体";h=-12 );transparent=1;z=6;cls="static" };
edit2={ bottom=73;right=107;left=79;top=51;font=LOGFONT( name=
"宋体";h=-12 );z=4;text="20";edge=1;cls="edit" }
)
/*}}*/

webstr=
/*
import win.ui;
var winform = win.form(parent=...; bottom=317;scroll=1;right=379;border="resizable";text="aardio Form" )
winform.add(  )
import web.form;
var wb = web.form( winform);
wb.go(...)
winform.show()
win.loopMessage();
return winform,wb;
*/


getMemorySize=
function(exefile){//读取进程中程序使用内存大小
    import process
   
    GetProcessMemoryInfo = ::Psapi.api(
"GetProcessMemoryInfo","int(pointer hProcess,struct& ppsmemCounters,int cb)")
   
    PROCESS_MEMORY_COUNTERS=
class{
        int cb;
        int PageFaultCount;
        int PeakWorkingSetSize;
//物理内存的最大值
        int WorkingSetSize;     //物理内存的大小
        int QuotaPeakPagedPoolUsage;
        int QuotaPagedPoolUsage;
        int QuotaPeakNonPagedPoolUsage;
        int QuotaNonPagedPoolUsage;
        int PagefileUsage;      
//虚拟内存大小
        int PeakPagefileUsage;  //虚拟内存的最大值
    }
   
    mem=PROCESS_MEMORY_COUNTERS()
   
for processEntry in process.each( exefile ) {  
        prc=process(processEntry.th32ProcessID)
        GetProcessMemoryInfo(prc.handle,mem,raw.sizeof(mem))
        
return mem.WorkingSetSize/1024;
        
//io.print(processEntry.szExeFile + " 内存使用:",mem.WorkingSetSize/1024 ++ "K")
    }
   
}

winform.button.oncommand =
function(id,event){
    size=getMemorySize(name)

    winform.richedit.selText=
"初始占用内存:" + size + "K" + '\n'
   
    tab={}

    num=
tonumber(winform.edit2.text)
   
    f=
loadcode(webstr)
   
   
for(i=1;num;1){
        form=f(winform.edit.text);  
//打开网页,重点看这句
        table.push(tab,form)
    }
    winform.richedit.selText=num +
"个网页打开完毕,等待20秒" + '\n'
    win.delay(20000)
    size=getMemorySize(name)
    winform.richedit.selText=num +
"个网页所占用内存:" + size + "K" + '\n'
   
   
for(i,form in tab){
        form.close();   
//关闭所有网页
    }
    win.delay(3000)
    size=getMemorySize(name)
    winform.richedit.selText=num +
"个网页关闭后,所占用内存:" + size + "K" + '\n'

}

name=io.splitpath(io._exepath).name;
//程序自己名称

winform.show()
win.loopMessage();
return winform;


/*
对于web打开N个网页,所占内存过高的有效解决办法

代码逻辑很简单,自己看下,

主要是用到loadcode

由下图的测试结果,发现打开50个页所占内存150M,关闭网页后只剩40M

所以对于需要打开N个网页操作完后,要及时关闭,以便释放内存

*/



w.JPG

最新评论

qqmmcc 发表于 2011-5-13 13:53:39

这个例子太好 谢谢 carl 分享

这个例子太好  谢谢 carl 分享
o00viw 发表于 2011-5-13 15:10:00

[quote]初始占用内存:5396K 20个网页打开完毕,等待20秒 20个网页所占用内存:12856K 20个网页关闭后,所占用内存:12036K


初始占用内存:5396K
20个网页打开完毕,等待20秒
20个网页所占用内存:12856K
20个网页关闭后,所占用内存:12036K
在我这里,没什么效果???

点评

看来你电脑配置牛啊,20个网页也只要12M,  发表于 2011-5-13 15:24
weiidoo 发表于 2011-5-13 16:50:43

我一般最多一次打开50个,更多就不敢了。 刷死百度! 初始占用内存:61372K 50个网页打开完毕,等待20秒 50个网页所占用内存:156976

我一般最多一次打开50个,更多就不敢了。

刷死百度!
初始占用内存:61372K
50个网页打开完毕,等待20秒
50个网页所占用内存:156976K
50个网页关闭后,所占用内存:98656K
落伍者 发表于 2011-5-13 21:25:44

初始占用内存:55960K 20个网页打开完毕,等待20秒20个网页所占用内存:116912K 20个网页关闭后,所占用内存:79264K

初始占用内存:55960K
20个网页打开完毕,等待20秒20个网页所占用内存:116912K
20个网页关闭后,所占用内存:79264K
太子 发表于 2011-5-13 22:53:34

aardio 20个网页打开完毕,等待20秒 20个网页所占用内存:55036K 20个网页关闭后,所占用内存:21404K 百度 初始占用内存:21

aardio
20个网页打开完毕,等待20秒
20个网页所占用内存:55036K
20个网页关闭后,所占用内存:21404K
百度
初始占用内存:21276K
50个网页打开完毕,等待20秒
50个网页所占用内存:34792K
50个网页关闭后,所占用内存:23720K
lzj_ykds 发表于 2011-5-17 14:35:55

[quote][size=2][color=#999999]Dic 发表于 2011-5-17 14:21[/color] [url=forum.php?mod

Dic 发表于 2011-5-17 14:21
请问wb.go(...)中的三个点是什么意思,能否解释一下?

应该表示参数吧,可变(不定)参数
carl 发表于 2011-5-17 15:26:55

[quote][size=2][color=#999999]Dic 发表于 2011-5-17 14:21[/color] [url=forum.php?mod

Dic 发表于 2011-5-17 14:21
请问wb.go(...)中的三个点是什么意思,能否解释一下?

io.open();

fun=function(...){
    io.print(...)
}

fun(
"a")
fun(
"a","b")
fun(
"a","b","c")


//运行下就知道 三点...的含义了


点评

你好黄啊,呵呵  发表于 2011-9-21 20:38
idcom 发表于 2011-5-23 09:23:37

好生牛B,学习,要好好学习下~

好生牛B,学习,要好好学习下~
hgbuser 发表于 2011-5-27 15:59:48

io.open();//打开控制台 var str=/* io.print(...); */ var f=loadcode(str); f("yyyy

io.open();//打开控制台
var str=/*
io.print(...);
*/
var f=loadcode(str);
f("yyyy","xxx");
execute("pause") //按任意键继续
io.close();//关闭控制台
zhuyuruicu 发表于 2011-5-29 19:01:09

用post吧,应该省内存

用post吧,应该省内存
海飘飘 发表于 2011-8-30 17:45:59

tab={} f=loadcode(webstr) form=f(); //打开网页,重点看这句 table.push(

    tab={}
    f=loadcode(webstr)
    form=f();  //打开网页,重点看这句
    table.push(tab,form)

使用上述语句后,发现程序运行时间长了,占用内存还是在增加,如何还能更好的避免内存占用太多的情况呢?
look 发表于 2011-8-30 20:00:24

[quote][color=#999999]海飘飘 发表于 2011-8-30 17:45[/color] [color=#999999]tab={} f=lo

海飘飘 发表于 2011-8-30 17:45 tab={} f=loadcode(webstr) form=f(); //打开网页,重点看这句

LZ已经说的很明白,打开N个网页要及时关闭!这里的关闭实质是关闭生成的窗体,并非只关闭网页!没有多书签功能的IE6你打开200个IE试试看就知道了!

点评

正解  发表于 2011-9-21 20:39
carl 发表于 2011-9-1 21:34:37

[quote][size=2][color=#999999]海飘飘 发表于 2011-8-30 17:45[/color] [url=forum.php?mod

海飘飘 发表于 2011-8-30 17:45
tab={}
    f=loadcode(webstr)
    form=f();  //打开网页,重点看这句

要最彻底的话,你就用独立的进程,处理完好,整个进程关闭,这样你想乍滴就乍滴,只要你电脑过好
海飘飘 发表于 2011-9-2 09:38:02

使用进程倒是一个办法,只是我还不会使用进程,多学学

使用进程倒是一个办法,只是我还不会使用进程,多学学
低调点 发表于 2011-10-10 19:03:14

[i=s] 本帖最后由 xj199241 于 2011-10-10 19:05 编辑 [/i] 稍微有一点点点的效果...... 我以前用的是 直接web

本帖最后由 xj199241 于 2011-10-10 19:05 编辑

稍微有一点点点的效果......
我以前用的是 直接web控件操作专门放在一个程序进程里  然后给它传参启动 这样很有效果或者升级IE8 IE9  换WIN7  都很有效
低调点 发表于 2011-10-10 19:03:33

微软有针对 IE内存泄漏的补丁 [url]http://support.microsoft.com/kb/943510/zh-cn[/url]

微软有针对 IE内存泄漏的补丁
http://support.microsoft.com/kb/943510/zh-cn
jyb21 发表于 2012-9-21 15:57:41

carl向你请教下 [url]http://bbs.aardio.com/thread-8172-1-1.html[/url] 这个样子的程序 在固定一个w

carl向你请教下
http://bbs.aardio.com/thread-8172-1-1.html
这个样子的程序 在固定一个web窗口里依次打开N个网页后,想解决内存过高,有办法吗
carl 发表于 2012-9-22 08:47:58

[quote][size=2][color=#999999]jyb21 发表于 2012-9-21 15:57[/color] [url=forum.php?m

jyb21 发表于 2012-9-21 15:57
carl向你请教下
http://bbs.aardio.com/thread-8172-1-1.html
这个样子的程序 在固定一个web窗口里依次打开N个 ...

最彻底的办法就是上面大家说的那样用独立的进程,不管你是什么语言都是一样的


12下一页

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-9-25 19:28 , Processed in 0.078125 second(s), 22 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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