IE9内存泄漏

时间:2012-05-15 18:05:11

标签: javascript internet-explorer-9

我注意到,在我的应用程序中,与每个页面刷新的Win7上的IE进程相关联的内存增加了20-30 MB。一旦达到约1.5 GB,浏览器就会无法响应。我正在使用IE9,并且只能在IE9中重现这一点。在Chrome,FF,IE7或IE8中没有此类问题。实际上,在兼容模式下运行IE9时也不会出现此问题。

特别是,我想知道即使页面刷新后内存也会泄漏。有没有人见过这个?

2 个答案:

答案 0 :(得分:6)

我不确定这是否是你的问题,但我也遇到了IE9内存泄漏问题,内存不断增长和增长(每次刷新/页面更改大约20mgs)。

如果您正在使用Modernizr(现在应该在最近的一个版本中修复,我相信2.5+),但如果您使用的是旧版本(并且不能因任何原因更新它),那么所有你需要做的是替换一个return语句。

Modernizr / Geolocation& IE9 ,它实际上是IE9的继承问题,而不是Modernizr。

return 'geolocation' in navigator

而不是:

return !!navigator.geolocation // this causes the memory leak (silly IE9)

https://github.com/Modernizr/Modernizr/issues/513

看看那个链接,但基本上需要更改Geolocation测试的return语句,这个问题会自行解决!

答案 1 :(得分:3)

过去,Internet Explorer在常见的JavaScript变量和DOM对象之间存在一些问题。所以,如果我没记错的话,就像这样的循环引用

var e = document.createElement('div');
var x = { elementReference: e };
e.jsReference = x;
即使没有其他对ex的引用,

也不会被垃圾回收。这是因为IE使用了不同的DOM元素和JavaScript垃圾收集方法。

现在,我相信这个问题已经在更高版本的IE中得到了解决,但也许并非如此。尝试找到所有这些有问题的引用,如果你不再需要它们,请手动删除它们。

e.jsReference = null;
x.elementReference = null;

编辑:在IE 8中测试

我写了这个简单的测试网页。

<html>
  <head>
    <title>Leak test</title>
    <script>
      function leak() {
        var e = document.createElement('div');
        var x = { elementReference: e };
        e.jsReference = x;
      }

      function test() {
        for (var i = 0; i < 10000; i++)
          leak();
        alert('Done');
      }
    </script>
  </head>
  <body>
    <input type="button" value="test" onclick="test();" />
  </body>
</html>

我在IE 8中测试了这个,因为我没有在这台机器上安装IE 9。但是,这仍然可能是相关的,因为它表明即使在IE的最新版本中问题仍然存在,因此它甚至可能在IE 9中持续存在。

我打开了页面并观看了内存使用情况。每次按下按钮后,内存使用量增加几MB。刷新网页后,绝对没有任何反应。关闭IE后,内存使用量恢复到原始状态。

您可以在IE 9中自行尝试。当然,您可能没有在代码中分配10000个循环引用对象,但您可能会创建更大的对象,这些对象可能包含您尚未找到的某些循环引用。 / p>