【发布时间】:2009-11-20 01:35:50
【问题描述】:
我有一个绑定到 ObjectDataSource 的 GridView,它正在调用返回 POCO 的 List 的业务服务对象。
最近,由于客户的要求,我的客户删除了 GridView 上的页面限制编号。这导致 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>
我已经说服我的客户和客户不要使用这个“功能”,但我仍然很好奇为什么会存在内存泄漏。
【问题讨论】:
标签: asp.net gridview memory-leaks