搜索
查看: 16228|回复: 24

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

    [复制链接]

21

主题

205

帖子

1274

积分

培训班

积分
1274
发表于 2011-5-13 13:49:36 | 显示全部楼层 |阅读模式

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
aardio - 没有做不到的,只有想不到的!
回复

使用道具 举报

52

主题

1341

帖子

7331

积分

荣誉会员

Rank: 8Rank: 8

积分
7331
发表于 2011-5-13 13:53:39 | 显示全部楼层

这个例子太好 谢谢 carl 分享

这个例子太好  谢谢 carl 分享
回复

使用道具 举报

51

主题

266

帖子

1553

积分

四级会员

Rank: 6Rank: 6

积分
1553
发表于 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
回复

使用道具 举报

6

主题

20

帖子

135

积分

荣誉会员

Rank: 8Rank: 8

积分
135
发表于 2011-5-13 16:50:43 | 显示全部楼层

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

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

刷死百度!
初始占用内存:61372K
50个网页打开完毕,等待20秒
50个网页所占用内存:156976K
50个网页关闭后,所占用内存:98656K
回复

使用道具 举报

117

主题

1239

帖子

6607

积分

六级会员

Rank: 9Rank: 9Rank: 9

积分
6607
发表于 2011-5-13 21:25:44 | 显示全部楼层

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

初始占用内存:55960K
20个网页打开完毕,等待20秒20个网页所占用内存:116912K
20个网页关闭后,所占用内存:79264K
我是菜鸟...
回复

使用道具 举报

1

主题

17

帖子

229

积分

二级会员

Rank: 3Rank: 3

积分
229
发表于 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
学会aardio,获得超能力!~
回复

使用道具 举报

9

主题

88

帖子

499

积分

二级会员

Rank: 3Rank: 3

积分
499
发表于 2011-5-29 19:01:09 | 显示全部楼层

用post吧,应该省内存

用post吧,应该省内存
回复

使用道具 举报

37

主题

184

帖子

1240

积分

四级会员

Rank: 6Rank: 6

积分
1240
发表于 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(...)中的三个点是什么意思,能否解释一下?

应该表示参数吧,可变(不定)参数
回复

使用道具 举报

21

主题

205

帖子

1274

积分

培训班

积分
1274
 楼主| 发表于 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
aardio - 没有做不到的,只有想不到的!
回复

使用道具 举报

2

主题

10

帖子

62

积分

一级会员

Rank: 2

积分
62
发表于 2011-5-23 09:23:37 | 显示全部楼层

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

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

使用道具 举报

17

主题

97

帖子

750

积分

荣誉会员

Rank: 8Rank: 8

积分
750
发表于 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();//关闭控制台
有太多东西要学,可是感觉没时间。
回复

使用道具 举报

21

主题

205

帖子

1274

积分

培训班

积分
1274
 楼主| 发表于 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();  //打开网页,重点看这句

要最彻底的话,你就用独立的进程,处理完好,整个进程关闭,这样你想乍滴就乍滴,只要你电脑过好
aardio - 没有做不到的,只有想不到的!
回复

使用道具 举报

75

主题

851

帖子

4971

积分

六级会员

The only one

Rank: 9Rank: 9Rank: 9

积分
4971
发表于 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
小时候,幸福是一件东西,拥有就是幸福; 长大了,幸福是一个目标,达到就是幸福; 成熟后,发现幸福原来是一种心态,领悟就是幸福.
回复

使用道具 举报

47

主题

177

帖子

966

积分

荣誉会员

Rank: 8Rank: 8

积分
966
发表于 2011-8-30 17:45:59 | 显示全部楼层

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

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

使用上述语句后,发现程序运行时间长了,占用内存还是在增加,如何还能更好的避免内存占用太多的情况呢?
用了好多年,效率杠杠的
回复

使用道具 举报

47

主题

177

帖子

966

积分

荣誉会员

Rank: 8Rank: 8

积分
966
发表于 2011-9-2 09:38:02 | 显示全部楼层

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

使用进程倒是一个办法,只是我还不会使用进程,多学学
用了好多年,效率杠杠的
回复

使用道具 举报

65

主题

953

帖子

5336

积分

荣誉会员

Rank: 8Rank: 8

积分
5336
发表于 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  都很有效
aaa
回复

使用道具 举报

65

主题

953

帖子

5336

积分

荣誉会员

Rank: 8Rank: 8

积分
5336
发表于 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
aaa
回复

使用道具 举报

48

主题

593

帖子

3329

积分

五级会员

Rank: 8Rank: 8

积分
3329
发表于 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个网页后,想解决内存过高,有办法吗
回复

使用道具 举报

21

主题

205

帖子

1274

积分

培训班

积分
1274
 楼主| 发表于 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个 ...

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


aardio - 没有做不到的,只有想不到的!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2017-11-23 20:41 , Processed in 0.109375 second(s), 21 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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