【发布时间】:2016-09-08 13:31:47
【问题描述】:
我正在构建一个应用程序并使用 Entity Framework 6。但我遇到了内存使用问题。无论我尝试什么,我迟早都会遇到内存不足的错误。到目前为止,我已经尝试了以下方法:
- 将 using 用于上下文。
- 批量保存更改并处理上下文。
- 手动调用 GC.Collect()。
但是这些都不能阻止 Entity 框架在我执行的每个 saveChanges 中使用更多内存。最终达到 2GB 的限制并导致我的程序崩溃。
有什么我不知道的方法可以让实体框架释放所有内存吗?
编辑
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()
}
【问题讨论】:
-
您是否为每个对数据库的请求创建新的上下文实例?
-
要获得帮助,您需要找到一种方法来创建一个最小但完整的程序来重现内存问题。否则,正如您肯定可以理解的那样,我们提出的任何建议都是纯粹的猜测。
-
你能分享你的 EF 查询吗?
-
someList中有多少项? -
你确定 EF 正在吃掉所有的内存吗?您甚至尝试在循环中处理和重新创建新的 EF 上下文这一事实暗示了问题出在其他地方。您发布的代码很有帮助,但它仍然不是MCVE,因为我们无法使用它来重现您的问题。
标签: c# entity-framework-6 out-of-memory