IE6内存泄露的另类解决方法

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?》

(0)

相关推荐

  • 电脑内存报警故障分析及解决方法

    故障分析:电脑内存出现故障的表现形式有很多,比如电脑内存不规范,内存条插入插槽有一定的空隙,内存条的金手指工艺差及内存条和空气中的氧气导致金手指的氧化层加厚种种情况都是会造成内存异常出现内存报警。 内 ...

  • win7 msconfig最大内存设置为0解决方法

    win7 msconfig最大内存设置为0解决方法 Windows 最大内存 本来想写写前因后果的,想想如果你现在也是这个问题的话,一定没时间看完整个始末. 我就说说我的解决方法吧. 进入 启动修复 ...

  • Win8.1系统audiodg.exe进程占用内存的原因和解决方法

    电脑安装上Win8.1系统后发现运行速度非常慢,打开任务管理器发现audiodg.exe进程占用比较大的内存,怎么办呢?为什么audiodg.exe进程会占用那么大的内存呢?很多新手都为此问题困惑,所 ...

  • win10内存不能written怎么办 win10该内存不能为written解决方法

    win10该内存不能为written解决方法: 1.首先,建议大家先使用杀毒软件对该软件进行扫描,看看是否存在病毒或者是木马. 2.如果不行的话,大家试着同时按下win+R打开电脑的运行窗口,然后输入 ...

  • Win10电脑内存占用过高怎么办 win10电脑内存占用高的解决方法

    一些用了几年或配置比较低的电脑,在如今使用中经常会出现CPU和内存占用太高,而出现卡顿等问题.今天小编以Win10系统为例,教大家如何优化电脑内存占用高的问题,尽可能提升电脑的流畅性. Win10电脑 ...

  • 绝地求生游戏内存不能为read解决方法

    绝地求生游戏内存不能为read解决方法,这里,让小编给大家介绍一下. 操作方法 01 进入系统桌面后点击桌面上的此电脑图标,选择属性. 02 接着进入系统设置中. 03 点击图中箭头所指的设置按钮. ...

  • Win10系统遇到游戏时闪屏的另类解决方法

    很多游戏玩家升级win10正式版后,就马上在新系统中玩起了经典的LOL英雄联盟游戏.不过,部分用户在玩游戏过程中,却遇到了画面一闪一闪的问题也就是闪屏故障.而在Win10系统中遇到游戏时闪屏另很多朋友 ...

  • win7系统无法下载4G内存以上的文件解决方法

    现在许多人都喜欢用U盘来传输和拷贝文件,可上在拷贝文件的过程中却发现u盘无法拷贝单个超过或等于4G的大文件,不然就拷贝失败.来看看下文的解决方法吧. 1.右键点击你存放文件的磁盘,点属性,这时你在“文 ...

  • 绝地求生应用程序错误内存不能为read解决方法

    绝地求生大逃杀提示内存不能为read怎么办呢?开始游戏时跳出下面这个错误提示,分硬件和软件两个方面的问题,但常见的主要是软件问题.下面绝地求生游戏助手奇游加速器与玩家们分享5个解决方法,一起来看看吧. ...