我有一個綁定到ObjectDataSource的GridView,該ObjectDataSource調用業務服務對象,該對象返回POCO的列表<>。帶有大型結果集的ASP.Net GridView內存泄漏?
最近,由於客戶的要求,我的客戶端刪除了GridView上的Page Limit編號。這導致GridView顯示超過10K項目。
當這個頁面被調用時,我們看到ASP.NET進程在每次刷新時吃掉了大約30MB,並沒有讓它流逝。 (最終網絡服務器拋出一個內存不足的例外)
我100%肯定這不是BSO(我創建了一個頁面,調用BSO 20次,看到沒有內存泄漏)。我運行了ANTS Profiler,發現大部分內存確實來自Web UI。
<asp:TextBox ID="uxQuery" runat="server" Width="300px" MaxLength="300"></asp:TextBox>
<asp:Button ID="uxSearch" runat="server" Text="Search" OnClick="uxSearch_Click" />
<asp:GridView ID="GridView1" Width="100%" Visible="True" DataSourceID="MyDataSource"
runat="server" AllowSorting="True" AutoGenerateColumns="False"
OnRowDataBound="GridView1_RowDataBound" EnableViewState="False">
<PagerSettings FirstPageText="<<" LastPageText=">>" Mode="NumericFirstLast"
NextPageText=">" PreviousPageText="<"></PagerSettings>
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="OrganizationName">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("Name") %>' CommandName="Name"
CommandArgument='<%# Eval("ID") %>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CityName" HeaderText="City" SortExpression="CityName" />
<asp:BoundField DataField="PhoneNumber" HeaderText="Phone" SortExpression="PhoneNumber" />
</Columns>
<HeaderStyle CssClass="MasterHeader" />
<AlternatingRowStyle CssClass="AlternateRow" />
</asp:GridView>
<asp:ObjectDataSource ID="MyDataSource" runat="server" OldValuesParameterFormatString="original_{0}"
SelectMethod="GetBySearchString" TypeName="BLL.BSO.SummaryBSO"
SortParameterName="sortExpression" EnablePaging="True">
<SelectParameters>
<asp:ControlParameter ControlID="uxQuery" Name="searchString" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
我已經談過我的客戶和客戶了這個「功能」,但我仍然好奇爲什麼內存泄漏存在。
感謝您的建議。結束了,我爲我的站點地圖使用了一個事件處理程序。 (sitemapresolve)很有趣,因爲我遵循http://msdn.microsoft.com/en-us/library/system.web.sitemap.sitemapresolve.aspx上的示例,社區對該帖子的評論確實有所幫助。 – itchi 2009-11-21 17:56:22