当前位置: 首页 > 图文教程 > 工具软件 > 浏览下载 > IE6内存泄露的另类解决方法

浏览下载
Mozilla Firefox使用技巧大联播
支持RSS feeds,Opera 8正式版发布
双核心任你选,Netscape 8正式发布
解决微软IE 6.0的三个典型问题
Firefox浏览器使用方法问答(上)
Firefox浏览器使用方法问答(中)
Firefox浏览器使用方法问答(下)
Firefox 使用常见问题和解决方法
腾讯TT浏览器V2.03简体中文版
IE7取消管理员权限 将具备防间谍软件功能
IE无法浏览网页的常见原因及解决方法
Maxthon中快速打开网页的三种方法
实现了!中文WinXP安装IE7 Beta1的方法
Firefox将转变成付费软件
windows IE浏览器精典技巧两则
Firefox推出1.5测试版 导航速度更快更安全
IE7第二测试版新功能泄露 具备页面缩放功能
Firefox 1.6a1简单体验报告
详述防止IE被恶意修改的小技巧
浏览器使用秘技五则

浏览下载 中的 IE6内存泄露的另类解决方法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-11   浏览: 79 ::
收藏到网摘: n/a

Hedger Wang 在国内 blog 上得到的方法:使用 try … finally 结构来使对象最终为 null ,以阻止内存泄露。

其中举了个例子:

function createButton() {
    var obj = document.createElement("button");
    obj.innerHTML = "click me";
    obj.onclick = function() {
        //handle onclick
    }
    obj.onmouseover = function() {
        //handle onmouseover
    }
    return obj;//return a object which has memory leak problem in IE6
}
var dButton = document.getElementById("d1").appendChild(createButton());
//skipped.... 

对于 IE6 中,引起内存泄露的原因,可看《Understanding and Solving Internet Explorer Leak Patterns》一文。

上面的例子,应该属于上文中的 “Closures”原因。

再看下用 try … finally 的解决方法:

/**
     * Use the try ... finally statement to resolve the memory leak issue
*/
function createButton() {
    var obj = document.createElement("button");
    obj.innerHTML = "click me";
    obj.onclick = function() {
        //handle onclick
    }
    obj.onmouseover = function() {
        //handle onmouseover
    }
    //this helps to fix the memory leak issue
    try {
        return obj;
    } finally {
        obj = null;
    }
}
var dButton = document.getElementById("d1").appendChild(createButton());
//skipped....

可能大家有疑问: finally 是如何解析的呢?

答案是:先执行 try 语句再执行 finally 语句。

例如:

function foo() {
    var x = 0;
    try {
        return print("call return " + (++x));
    } finally {
        print("call finally " + (++x));
    }
}
print('before');
print(foo());
print('after');

返回的结果为:
print » before
print » call return 1
print » call finally 2
print » true
print » after

更多详细的演示:
《Finally, the alternative fix for IE6’s memory leak is available》

相关的一些讨论:
《Is “finally” the answer to all IE6 memory leak issues?》