为什么IE在jQuery对象中包装HTML响应时会泄漏内存?

Mar*_*ter 11 ajax jquery internet-explorer memory-leaks

我想弄清楚为什么IE在jQuery对象中包装AJAX请求的HTML页面进行处理时泄漏内存.用户可以访问页面并让它静置几分钟或几小时,因此页面ajax每分钟使用几次jQuery 方法来获取新数据,然后我用新的预渲染数据替换页面的重要部分.

在这一点上,我已经将它缩小到一个单独的调用 - 当$(data)被调用来包装HTML字符串,内存峰值一点,并且似乎从来没有被垃圾收集.随着时间的推移,使用了数百MB,我不得不重新加载页面或重新启动IE.

这个小提琴能够重现这个问题.它使用AJAX来请求页面,然后$(data)在紧密循环中调用以夸大泄漏.Chrome和Firefox似乎都像我期望的那样做出反应(内存被回收),但IE表现得很糟糕.惊喜.

使用Process Explorer,我看到在运行上述小提琴后两次内存消耗大幅增加.

在此输入图像描述

我目前正在标准模式下使用IE9.

为什么会这样?有解决方法吗?

更新

这是一个小提琴,演示了不使用AJAX的问题.

MrL*_*eap 0

我看到了你所看到的,当我更改代码以在每次成功调用时重新分配函数时,神奇的是它没有泄漏(至少在我的环境中)。

所以,我的解决方案很愚蠢,但它似乎对我有用。对你起作用吗?

$(function(){
    $.ajaxSetup({ cache: false });

    $('#go').click(performCall);
});

function performCall() {
    $('#timestamp').text('Working...');

    $.ajax({
       url: 'http://fiddle.jshell.net/',
        success: function(){
            var func = function(data, textStatus, jqXHR) {
                $('#timestamp').text('Done at ' + new Date());
                for(var x = 0; x < 100; x++) {
                    var $a = $(data);
                }
            };
            func();
        }
   });
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/tCvUw/