Asp.net 为什么ie 8内存会泄漏?

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

编辑2-

再现——(我希望如此)

创建一个空的asp.net项目,添加一个default.aspx和一个about.aspx

将此代码用于default.aspx文件:

这是关于.aspx的

建造,并对其进行筛选。单击按钮,然后单击链接。筛现在应该列出1个内存泄漏

这个简单的布局将服务器按钮放在面板中。如果单击它,然后单击“离开”链接,sIEve将报告1个内存泄漏:

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&amp;t=634525784292792916" type="text/javascript"></script>


<script src="/ScriptResource.axd?d=0VE3fsyoY2cTFnat6m0YjE4OCCjVV0jmjSC6wigMBEOHyKW8kewBrhtJnBFIn73VSWcGW45QXwelC5m-1iZoornC8qWpZ-kXP-Y38e49qW1TbssOgo419ZWtVHSVmIpSg9CvXOQzUBClAjuHORyX5Q2&amp;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&amp;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上运行,但肯定会成功,不过必须等到下周二!这没有做任何更改,它仍在报告内存泄漏。