使用EF检索和创建后,我应该将对象保存在内存中吗?

时间:2012-03-19 08:51:50

标签: c# entity-framework

我正在使用EF来从我的数据库中获取和创建一些对象。我需要在两个不同的迭代中使用这些对象。在第一次迭代中,我从我的数据库中获取它们。在第二个我需要再次使用对象。

如果我将对象保存在内存中的List中,而不是再次从数据库中检索它们,或者EF是否将它们保存在内存中,因为它们最近被使用过,那么第二次迭代会更快吗?

5 个答案:

答案 0 :(得分:1)

你应该像这样Load内存中的对象,以便可以使用Local属性访问它们:

 context.YourTable.Load();

然后你应该使用Local属性迭代你想要的次数。

foreach(var obj in context.YourTable.Local) {
 ////
}

您也可以使用ToList(),这样您的商品就会被加载到内存中

答案 1 :(得分:1)

除非您禁用跟踪,否则EF会在DbContext对象的生命周期内保留在内存中查询的对象。

如果您不想更新对象,我建议您将它们保存到内存而不将它们保存到DBcontext,因为这样可以提高性能。您可以通过在查询中添加.AsNoTracking()来完成此操作。

如果要将对象持久化超过上下文的生命周期,可以通过在内存中缓存它们来完成此操作。然后,您可以在以后重新附加它们以执行更新

答案 2 :(得分:1)

当然从内存中检索更快。顺便说一下,如果你想从内存中获取对象,你不必将它存储在列表中,只需使用Local一个EF功能。

答案 3 :(得分:0)

如果你刚刚需要它们,为什么不把它们留在记忆中呢?您只存储对象的引用,这些对象重量轻。

答案 4 :(得分:0)

尝试使用缓存方法,尤其是对于不必经常更改的对象