【问题标题】:How to solve out of memory exception error in Entity Framework?如何解决实体框架中的内存不足异常错误?
【发布时间】:2010-04-05 08:17:18
【问题描述】:

这些下面的代码给出了我的 Rehber 数据的全部数据。但是,如果我想通过 Gridview 显示网页,请向我发送内存不足异常错误。

基因提示.BAL:



    public static List<Rehber> GetAllDataOfRehber()
        {
            using (GenoTipSatisEntities genSatisCtx = new GenoTipSatisEntities())
            {
                ObjectQuery<Rehber> rehber = genSatisCtx.Rehber;
                return rehber.ToList();
            }
        }

如果我像这样直接绑定数据虚拟 gridview 就不会出现任何问题,一切都很棒!!!

 <asp:GridView ID="gwRehber" runat="server">

       </asp:GridView>

如果以上代码将数据发送到 Satis.aspx 页面:

using GenoTip.BAL;


namespace GenoTip.Web.ContentPages.Satis
{
    public partial class Satis : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                gwRehber.DataSource = SatisServices.GetAllDataOfRehber();
                gwRehber.DataBind();
                //gwRehber.Columns[0].Visible = false;
            }
        }
    }
}

但我重新安排了我的 gridview 让我内存不足异常!!!!我需要这个安排来显示细节!!!

 <asp:GridView ID="gwRehber" runat="server">
       <Columns>
      <%-- <asp:TemplateField>
       <ItemTemplate>
        <asp:Button runat="server" ID="btnID" CommandName="select"  CommandArgument='<%# Eval("ID") %>'  Text="Seç" />
       </ItemTemplate>

       </asp:TemplateField>--%>
       <asp:BoundField DataField="Ad" HeaderText="Ad" />
       <asp:BoundField DataField="BireyID" HeaderText="BireyID" Visible="false" />
       <asp:BoundField DataField="Degistiren" HeaderText="Değiştiren" />
        <asp:BoundField DataField="EklemeTarihi" HeaderText="EklemeTarihi" />
       <asp:BoundField DataField="DegistirmeTarihi" HeaderText="Değiştirme Tarihi" Visible="false" />
       <asp:BoundField DataField="Ekleyen" HeaderText="Ekleyen" />
        <asp:BoundField DataField="ID" HeaderText="ID" Visible="false" />
       <asp:BoundField DataField="Imza" HeaderText="Imza" />
        <asp:BoundField DataField="KurumID" HeaderText="KurumID" Visible="false" />
       </Columns>
       </asp:GridView>

错误详情:

[OutOfMemoryException: 'System.OutOfMemoryException' türünde özel durum oluşturuldu.] System.String.GetStringForStringBuilder(字符串值,Int32 startIndex,Int32 长度,Int32 容量)+29 System.Convert.ToBase64String(Byte[] inArray, Int32 offset, Int32 length, Base64FormattingOptions options) +146 System.Web.UI.ObjectStateFormatter.Serialize(对象状态图)+183 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(对象状态)+4 System.Web.UI.Util.SerializeWithAssert(IStateFormatter 格式化程序,对象状态图)+37 System.Web.UI.HiddenFieldPageStatePersister.Save() +79 System.Web.UI.Page.SavePageStateToPersistenceMedium(对象状态)+105 System.Web.UI.Page.SaveAllState() +236 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+1099

【问题讨论】:

    标签: c# .net asp.net visual-studio-2008 entity-framework


    【解决方案1】:

    所以看起来问题是你在状态中投入了太多;这很可能意味着以下之一(或两者):

    • 您阅读的行数太多了
    • 序列化程序正在遍历(可能是延迟加载?)属性,导致加载/序列化的数据超出预期

    为了解决这个问题,我建议先投影到一个简单的 DTO 模型,然后再执行任何可能将数据置于状态的操作(这样您确切地知道您正在序列化哪些数据),并仔细观察关于您正在处理的行数(适当地使用TakeWhere)。

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多