返回OutofMemoryException

返回OutofMemoryException

我在数据模型类中有一个相当简单的方法,该方法只不过是插入一行并保存更改。它可以正确处理大约227条记录(共408条),然后返回OutofMemoryException。即使我们仅处理单行条目并保存更改,这种情况仍会发生。任何想法如何解决这种情况?

protected ADMIN_DB_Entities _AdminEntities = new ADMIN_DB_Entities();

public void InsertBase64Payload(string sBase64PayloadValue, string sSourceValue, Guid gSourcePrimaryKey, DateTime dDateProcessed)
{
    Base64Payload newBase64PayLoadEntry = new Base64Payload();
    newBase64PayLoadEntry.BASE64_VALUE = sBase64PayloadValue;
    newBase64PayLoadEntry.SOURCE_TABLE = sSourceValue;
    newBase64PayLoadEntry.SOURCE_PRIMARY_KEY = gSourcePrimaryKey;
    newBase64PayLoadEntry.DATE_PROCESSED = dDateProcessed;
}
try
{
  _AdminEntities.Base64Payload.Add(newBase64PayLoadEntry);
  _AdminEntities.SaveChanges();
}
catch (Exception ex)
{
    ConsoleAppLog.WriteLog(<Error Message here.>)
}

最佳答案

我认为您正在使用非常大的base64“有效载荷”。

EntityFramework的DbContext将实体的状态保存在内存中。因此,即使将更改保存到数据库中,这些值也将位于进程内存中。 DbContext实现IDisposable接口,因此在这种情况下,最好在将所需的数据保存到数据库后处置上下文:

using (var entites = = new ADMIN_DB_Entities())
{
   try
   {
      entities.Base64Payload.Add(newBase64PayLoadEntry);
      entities.SaveChanges();
   }
   catch (Exception ex)
   {
      ConsoleAppLog.WriteLog(ex.Message);
   }
}


注意:请记住,有一种机制可以从内部数据库上下文的跟踪中取消/附加特定实体,因此,如果需要,您还可以使用单个DbContext实例。

关于c# - 为什么带有EF的C#控制台应用程序在单行输入上返回OutofMemoryException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46100828/

10-09 05:07