IE的JScript解析器可能有Memory Leak

该博客为转载内容,转载自https://www.cnblogs.com/birdshome/archive/2005/02/15/104599.html ,涉及JavaScript技术。
    在家过完了年,感觉精神很爽。明天大家可能都就上班了,新的一年开始了,希望大家新年新气象 emteeth.gif。而其我已经发现一点点新年的灵感了哦~,我原来发现IE中的JScript解释器可能有的Memory Leak的问题,可老是早不到出问题的代码,今天一下就逮到了一个可以复现的case~~

    想当初我做那个无刷新的JScript TreeView控件时,硬是被折磨坏了 emcry.gif。IE进程IEXPLORE.EXE的内存使用量常常串到200M左右,搞得我的JScript代码运行狂慢,有的时候展开一个Node需要好几秒钟@_@。

    复现这个Bug的代码如下:
None.gif < html >
None.gif
< head >
None.gif    
< title > IE Memory Leak Bug </ title >
None.gif
</ head >
None.gif
< body >
None.gif
< button  onclick ="GenerateObjects(this)" > Append Elements </ button >
None.gif
< div  id ="container" ></ div >
ExpandedBlockStart.gifContractedBlock.gif    
< script  language ="Javascript" > dot.gif
InBlock.gif
function GenerateObjects(elmt)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    
var room = document.getElementById('container');
InBlock.gif    
for ( var i=0 ; i < 1000 ; ++i )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif         
var obj = new TestObject('__Object__' + i);
InBlock.gif         room.appendChild(obj.Render(document));
ExpandedSubBlockEnd.gif    }
 
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
function TestObject(name)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif     
this.m_Name = name;
InBlock.gif     
this.m_Description = '';
InBlock.gif     
this.m_Element = null;
InBlock.gif     
InBlock.gif     
this.toString = function()
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif         
return '[class TestObject]'; 
ExpandedSubBlockEnd.gif     }

ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
function TestObject.prototype.Render(doc)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif     
var span = doc.createElement('SPAN');
InBlock.gif    *span.Object 
= this;
InBlock.gif    *
this.m_Element = span;
InBlock.gif
     
InBlock.gif     span.Name 
= this.m_Description;
InBlock.gif     span.innerText 
= this.m_Name;
InBlock.gif     span.style.display 
= 'block';
InBlock.gif     
return span;
ExpandedBlockEnd.gif}

None.gif
</ script >
None.gif
</ body >
None.gif
</ html >
None.gif

    运行上面的代码,不断的点击"Generate Elements"按钮,IEXPORE.EXE的内存使用量(PM+VM)持续的上涨。这时不管你点"Refresh"还点"Go"按钮,IE的内存使用量始终不会减少 hitwall.gif hitwall.gif hitwall.gif。除非关掉IE在重新打开,内存才能被释放。

    问题出在上面示例代码中打" *"的那两句话上,只要注释掉任意一句,Refresh页面后,IEXPORE.EXE的内存使用量就会降到刚打开IE是那个水平上。

    有兴趣欢迎您测试一下这个例子,看看是不是会Memory Leak?

    相关文章:
        · 继续来研究JScript解析引擎的GC问题

转载于:https://www.cnblogs.com/birdshome/archive/2005/02/15/104599.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值