我在数据模型类中有一个相当简单的方法,该方法只不过是插入一行并保存更改。它可以正确处理大约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/