Bee*_*eak 5 c# out-of-memory entity-framework-6
我正在构建一个应用程序,并且正在使用实体框架6.但是我遇到了内存使用问题.无论我尝试什么,我迟早会遇到内存不足的错误.到目前为止,我尝试了以下内容:
但是这些都没有阻止Entity框架在我做的每个saveChanges中使用更多的内存.最终达到2GB限制并崩溃我的程序.
有什么方法我不知道让Entity Framework释放所有内存吗?
编辑
using (var sqlite = new myEntities())
{
sqlite.Configuration.AutoDetectChangesEnabled = false;
sqlite.Configuration.ValidateOnSaveEnabled = false;
foreach (var someItem in someList)
{
var newItem = new Item
{
...
};
sqlite.tableName.Add(newItem);
if (++countRecords%1000 == 0)
{
sqlite.SaveChanges();
}
}
sqlite.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
如上所述,我也尝试过设置上下文而不使用并在SaveChanges之后处理它.
if (++countRecords%1000 == 0)
{
sqlite.SaveChanges();
sqlite.Dispose();
sqlite = new myEntities()
}
Run Code Online (Sandbox Code Playgroud)
如果确实是批次问题,请尝试以下操作:
int batchSize = 10;
for (int i = 0; i < = someList.Count / batchSize; i++)
{
var batch = someList.Skip(batchSize * i).Take(batchSize);
using (var sqllite = new nyEntities())
{
foreach(var item in batch)
{
var newItem = new Item() {...};
sqllite.tableName.Add(newItem);
}
sqllite.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
这会反转 using 语句以在每个批次后处理 sqllite,从而清除它并为每个批次重新开始。
这段代码是用 notepad++ 编写的,所以如果你尝试它,请小心清理它。