Comment résoudre l'erreur d'exception de mémoire insuffisante dans Entity Framework?

.net asp.net c# entity-framework visual-studio-2008

Question

ces codes ci-dessous donnent des données complètes de mes données Rehber. Mais si je veux afficher une page Web via Gridview, envoyez-moi une erreur d’exception de mémoire.

GenoTip.BAL:



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

Si je lie des données directement avec une grille factice, il n'y a pas de problème, tout est génial !!!

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

       </asp:GridView>

si les codes ci-dessus envoient des données à la page 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;
            }
        }
    }
}

mais j'ai réarrangé mon gridview m'envoyer hors exception mémoire !!!! J'ai besoin de cet arrangement pour montrer 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>

Détail de l'erreur:

[OutOfMemoryException: 'System.OutOfMemoryException' türünde özel durum oluÅŸturuldu.] System.String.GetStringForStringBuilder (valeur de chaîne, Int32 startIndex, longueur Int32, Int32 capacité, capacité Int32). Longueur Int32, options Base64FormattingOptions) +146 System.Web.UI.ObjectStateFormatter.Serialize (Object stateGraph) +183 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize (Object state) +4. UI.Util.SerializeWithAssert (formateur IStateFormatter, Object stateGraph) +37 System.Web.UI.HiddenFieldPageStatePersister.Save () +79 System.Web.UI.Page.SavePageStateToPersistenceMedium (Etat de l'objet) +105 System.Web.U. SaveAllState () +236 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099

Réponse acceptée

Il semble donc que le problème est que vous mettez trop en état; très probablement, cela signifie l'un (ou les deux) de:

  • vous lisez beaucoup, beaucoup trop de lignes
  • le sérialisateur parcourt les propriétés (peut-être chargé paresseux?), générant plus de données que prévu / chargé

Pour lutter contre cela, je suggérerais de projeter à la place sur un modèle DTO simple avant de faire quoi que ce soit qui puisse mettre les données en état (pour que vous sachiez exactement quelles données vous sérialisez), et pour regarder de près le nombre de lignes que vous manipulez (en utilisant Take et le Where échéant).



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow