Как устранить ошибку исключения нехватки памяти в Entity Framework? - PullRequest
2 голосов
/ 05 апреля 2010

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

GenoTip.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;
            }
        }
    }
}

, но я переставил свое представление сетки и отправил мне исключение из памяти !!!!мне нужно это расположение, чтобы показать 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 (, Int32 startIndex, Int32 длина, Int32 емкость) +29 System.Convert.ToBase64String (Byte [] inArray, Int32 смещение, Int32 длина, параметры Base64FormattingOptions) +146 System.Web.UI.ObjectStateFormatter.Serialize (Object stateGraph) +183 Система.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize (состояние объекта) +4 System.Web.UI.Util.SerializeWithAssert (форматер объекта IStateFormatter, состояние 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 (логическое значение includeStagesBeforeAsyncPoint +, логическое значение includeStages)1017 *

1 Ответ

2 голосов
/ 05 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...