Как устранить ошибку исключения нехватки памяти в Entity Framework?

2

эти приведенные ниже коды дают целые данные моих данных Ребера. Но если я хочу показать веб-страницу через Gridview, отправьте мне ошибку исключения из памяти.

GenoTip.BAL:



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

если я привяжу данные непосредственно к фиктивной сетке, вроде бы не возникает никаких проблем.

 <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, отправил мне исключение из памяти!!!! Мне нужно это устройство, чтобы показать deta!!!

 <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(значение String, Int32 startIndex, длина Int32, емкость Int32) +29  System.Convert.ToBase64String (Byte [] inArray, смещение Int32, длина Int32, опции Base64FormattingOptions) +146  System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +183  System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(состояние объекта) +4  System.Web.UI.Util.SerializeWithAssert(формат форматирования IStateFormatter, State stateGraph) +37  System.Web.UI.HiddenFieldPageStatePersister.Save() +79  System.Web.UI.Page.SavePageStateToPersistenceMedium(состояние объекта) +105  System.Web.UI.Page.SaveAllState() +236  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099

Теги:
entity-framework
visual-studio-2008

1 ответ

2
Лучший ответ

Итак, похоже, проблема заключается в том, что вы слишком много вставляете в состояние; скорее всего, это означает один (или оба):

  • вы читаете далеко, слишком много строк
  • сериализатор выполняет свойства (возможно, ленивые загруженные?), вызывая больше данных, чем вы ожидаете, чтобы они были загружены/сериализованы

Чтобы бороться с этим, я предлагаю вместо этого проецировать простую модель DTO, прежде чем делать что-либо, что может привести данные в состояние (чтобы вы точно знали, какие данные вы сериализуете) и внимательно посмотреть, сколько строк вы обрабатываете (используя Take и Where соответственно).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню