我正在构建一个应用程序并使用 Entity Framework 6。但是我遇到了内存使用问题。无论我尝试什么,我迟早会遇到内存不足错误。到目前为止,我已经尝试了以下方法:
- 在上下文中使用 using。
- 批量保存更改并处理上下文。
- 手动调用 GC.Collect()。
但这些都不能阻止 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();
}
如上所述,我也尝试过在不使用的情况下设置上下文,并在 SaveChanges 之后处理它。
if (++countRecords%1000 == 0)
{
sqlite.SaveChanges();
sqlite.Dispose();
sqlite = new myEntities()
}
最佳答案
如果确实是批处理问题,试试这样:
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();
}
}
这会反转 using 语句以在每个批处理后处理 sqllite,从而清除它并为每个批处理重新开始。
此代码是用 notepad++ 编写的,因此如果您尝试使用,请小心清理它。
关于c# - Entity Framework 6 内存使用量达到 2GB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392372/