当使用javascript每隔X秒自动刷新页面时,我遇到了内存泄漏。我已经证实,这种泄漏没有发生在火狐或Chrome,也没有发生在IE7/8/10-只有IE9(我在Win7上)。
对我来说最疯狂的是,当我在IE9中看到这个并且看到内存使用的爬升时,我可以在IE中打开开发工具,将浏览器模式更改为IE8,并且当页面继续重新加载时,内存停止爬升。将其更改为IE9模式,它就会再次上升。
下面的示例页面是一个显示泄漏的模拟页面,但我正在体验的页面是一个监视页面,我每天都会打开它。如果我让这个页面在IE9中打开几个小时,它最终会耗尽32位应用程序可以访问的所有内存(~1.5Gb),然后IE就会失去响应。
我已经用drip-0.5和IEJSLeaksDetector查看了这个示例页面--但这两个漏洞查找器都是基于IE7呈现引擎的,而这并不是一个问题。这两种工具都没有问题。
我能做些什么来缓解这种情况(除了使用不同的浏览器),或者我能做些什么呢?
示例.aspx文件如下所示。
<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!更新后的代码如下:
<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留在页面上呢?
谢谢!
发布于 2013-01-11 21:48:23
我猜你应该明确地停止这个间隔。
clearInterval(秒);
到15点的时候。
https://stackoverflow.com/questions/14285890
复制相似问题