Asp.net 为什么ie 8内存会泄漏?
编辑2- 再现——(我希望如此) 创建一个空的asp.net项目,添加一个default.aspx和一个about.aspx 将此代码用于default.aspx文件: 这是关于.aspx的 建造,并对其进行筛选。单击按钮,然后单击链接。筛现在应该列出1个内存泄漏 这个简单的布局将服务器按钮放在面板中。如果单击它,然后单击“离开”链接,sIEve将报告1个内存泄漏:Asp.net 为什么ie 8内存会泄漏?,asp.net,memory-leaks,updatepanel,Asp.net,Memory Leaks,Updatepanel,编辑2- 再现——(我希望如此) 创建一个空的asp.net项目,添加一个default.aspx和一个about.aspx 将此代码用于default.aspx文件: 这是关于.aspx的 建造,并对其进行筛选。单击按钮,然后单击链接。筛现在应该列出1个内存泄漏 这个简单的布局将服务器按钮放在面板中。如果单击它,然后单击“离开”链接,sIEve将报告1个内存泄漏: http://localhost:2605/Default.aspx (1 reference) <INPUT val
http://localhost:2605/Default.aspx (1 reference)
<INPUT value="partial postback" type=submit name=ctl01 >
http://localhost:2605/Default.aspx (1参考)
Aspx来源:
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="LeakTestProject._Default" %>
<html>
<head>
<title></title>
</head>
<body>
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button Text="partial postback" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
<a href="SomeOtherPage.aspx" >leave</a>
</body>
</html>
我想我已经在我的应用程序中找到了一个内存泄漏源
有人能解释为什么会发生这种情况,以及如何解决它吗
(注意-没有运行服务器端代码)
编辑-
以下是生成的html:
<html>
<head>
<title></title>
</head>
<body>
<form method="post" action="Default.aspx" id="Form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTUzNzM3OTMxMmRk27mKixZYS2MtHiuw7SZF6+1A/CkWRnnarcN2a05yCJs=" />
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=_lxNoU5aYdEC_WWnUhGTN0VgFQnwFJ1fkZBkPhUGNITY1Tt87f4CGSPd9dhq2TD9I8lv5ljTGi956KpbHSLq3ebld0t7nKLON7Hc04CCAwA1&t=634525784292792916" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=0VE3fsyoY2cTFnat6m0YjE4OCCjVV0jmjSC6wigMBEOHyKW8kewBrhtJnBFIn73VSWcGW45QXwelC5m-1iZoornC8qWpZ-kXP-Y38e49qW1TbssOgo419ZWtVHSVmIpSg9CvXOQzUBClAjuHORyX5Q2&t=ffffffffbd2983fc" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
<script src="/ScriptResource.axd?d=DBlWOXkmp0ycsSicGEZhACmLuhW1VF8BppK-Uj8ijyjhFxx7MTG8NW0gLl3IJ6TyEo2rAMfLCQ9rO_bk2wDCcpyT3Df6CN-TLMAA575gUNAjTSzC6U1koagV2FYRmu4TNsAgoEjhkN6fJX3lENf7Bw2&t=ffffffffbd2983fc" type="text/javascript"></script>
<div class="aspNetHidden">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLZvOXNBgKiwImNCx8fSMXEwq+V+5yrnoaTcidPwoJw3ebm6DJQ1D3fVVAL" />
</div>
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', 'Form1', ['tUpdatePanel1','UpdatePanel1'], [], [], 90, '');
//]]>
</script>
<div id="UpdatePanel1">
<input type="submit" name="ctl01" value="partial postback" />
</div>
</form>
<a href="About.aspx" >leave</a>
</body>
</html>
//
//
//
据报道,内存泄漏听起来很像你正在经历的情况
请参阅“迭代2-内存泄漏”
他使用一个名为“筛子”的工具说:“你可以看到,每次我单击“刷新”,它都会创建一组新的输入元素,而不会破坏以前的元素。”
他的修复是一个JQuery插件,它调用更新面板清理挂钩。你可以试试这个吗
(function($) {
$.fn.Disposable = function(cln) {
return this.each(function() {
var el = this;
if (!el.dispose) {
el.dispose = cleanup; // will be called by
// Microsoft for cleanup
$(window).bind("unload", cleanup);
}
function cleanup() {
if (!el)
return;
$(el).unbind();
$(window).unbind("unload", cleanup);
el.dispose = null;
el = null;
};
});
};
})(jQuery);
function add() {
$get('res').value =
parseInt($get('i1').value) + parseInt($get('i2').value);
}
Sys.Application.add_load(function() {
$('.num').change(add).Disposable();
});
你能试试这个变化吗
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script>
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(my_init);
function my_init() {
document.getElementById("UpdatePanel1").innerHTML = "";
}
</script>
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(my_init);
函数my_init(){
document.getElementById(“UpdatePanel1”).innerHTML=“”;
}
那么这只是在IE8中?在兼容模式打开的情况下如何?您是否尝试过禁用浏览器上的插件以查看是否有任何作用?启动IE开发者工具栏,看看是否有javascript轮询在进行,或者其他什么。也许使用Firebug也有同样的目的。从外观上看,它看起来“很好”。@rangitatanz sieve仅适用于ie,但回到出现问题的原始应用程序,它在chrome和ff中运行良好。我用评测工具看了一眼正在运行的脚本,但它在3个axd资源文件中运行了几百个函数,总共约10000行javascript。您运行的是哪个版本的.net?@rangitatanz vs 2010 sp1,.net 4,ajaxtoolkit版本3.0.30930.28736您是否已确认此功能可在另一台笔记本电脑上的IE8的diff clean安装上运行?我以前已经查看过该页面。它是一个脚本,允许您在更新面板刷新时自动清理jQuery闭包。在本例中,没有加载jQuery。根本没有用户javascript。您尝试过使用筛选工具吗?我的理解是,无论JQuery是否在页面上,updatepanel都在这样做。修复程序是用JQuery编写的?没有加载任何JQuery,因此插件不会运行,在发布问题之前,我首先使用了sieve来查找问题。好的,我没有阅读你说使用sieve的第一行。我现在刚刚试过——用你的代码样本和筛选,每次都放在完全相同的内存中。当我转到“somepage.aspx”时,我看到的是一个空页面,它会像我预期的那样下降。我无法复制您的问题,所以除非您能给我一些东西-例如,我可以现场测试的web表单。。或者skydrive中的一个项目?在Windows7 32位上试过,在cassini和IISI上运行,但肯定会成功,不过必须等到下周二!这没有做任何更改,它仍在报告内存泄漏。