首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在asp.net标准模式下IE9 javascript内存泄漏

仅在asp.net标准模式下IE9 javascript内存泄漏
EN

Stack Overflow用户
提问于 2013-01-11 20:10:23
回答 1查看 776关注 0票数 2

当使用javascript每隔X秒自动刷新页面时,我遇到了内存泄漏。我已经证实,这种泄漏没有发生在火狐或Chrome,也没有发生在IE7/8/10-只有IE9(我在Win7上)。

对我来说最疯狂的是,当我在IE9中看到这个并且看到内存使用的爬升时,我可以在IE中打开开发工具,将浏览器模式更改为IE8,并且当页面继续重新加载时,内存停止爬升。将其更改为IE9模式,它就会再次上升。

下面的示例页面是一个显示泄漏的模拟页面,但我正在体验的页面是一个监视页面,我每天都会打开它。如果我让这个页面在IE9中打开几个小时,它最终会耗尽32位应用程序可以访问的所有内存(~1.5Gb),然后IE就会失去响应。

我已经用drip-0.5IEJSLeaksDetector查看了这个示例页面--但这两个漏洞查找器都是基于IE7呈现引擎的,而这并不是一个问题。这两种工具都没有问题。

我能做些什么来缓解这种情况(除了使用不同的浏览器),或者我能做些什么呢?

示例.aspx文件如下所示。

代码语言:javascript
复制
<html>
<head>
    <title></title>
<script type="text/javascript">
    var sec = 15;
    function pageLoad() {
        setInterval(updReload, 1000);
    }
    function updReload() {
        if (sec == 0) {
            window.location.reload();
        } else {
            document.getElementById('spnReload').innerHTML = sec--;
        }
    }
</script>
</head>
<body>
    <form id="Form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <h1>Current Time is: <%=Now.ToShortTimeString() %></h1>
        Reload in: <span id="spnReload"></span>
    </form>
</body>
</html>

更新:,这是我刚刚发现的一个新问题: IE9古怪模式似乎没有只有泄漏的IE9标准模式。即使我将浏览器模式设置为IE8,如果文档模式是IE9标准,内存泄漏也是存在的。

Update2: --我尝试在一个典型的ASP文件中重新创建这个示例页面,但是它没有显示上面示例文件中显示的内存泄漏。因此,我开始想,它可能与.NET自己的javascript函数有关。我注释掉了ScriptManager,并将onload="pageLoad()"添加到body标记中,内存泄漏从每次重新加载1-2 MB下降到每次重新加载大约80 KB!更新后的代码如下:

代码语言:javascript
复制
<html>
<head>
    <title></title>
<script type="text/javascript">
    var sec = 15;
    function pageLoad() {
        setTimeout(updReload, 1000);
    }
    function updReload() {
        if (sec == 0) {
            window.location.reload();
        } else {
            document.getElementById('spnReload').innerHTML = --sec;
            setTimeout(updReload, 1000);
        }
    }
</script>
</head>
<body onload="pageLoad()">
    <form id="Form1" runat="server">
        <%--<asp:ScriptManager ID="ScriptManager1" runat="server" />--%>
        <h1>Current Time is: <%=Now.ToShortTimeString() %></h1>
        Reload in: <span id="spnReload"></span>
    </form>
</body>
</html>

还有点漏水,但我可能会忍受的..问题是,正在发生这种情况的生产页面是一个内容页,其母版页包含ScriptManager。我想我必须通过Page_Load中的代码删除它,如果这是我必须使用的分辨率。

还有谁经历过.NET 4.0 ScriptManager Javascripts的1-2 MB内存泄漏呢?

我还能做些什么来绕过漏洞,把ScriptManager留在页面上呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2013-01-11 21:48:23

我猜你应该明确地停止这个间隔。

clearInterval(秒);

到15点的时候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14285890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档