我正在使用EF来从我的数据库中获取和创建一些对象。我需要在两个不同的迭代中使用这些对象。在第一次迭代中,我从我的数据库中获取它们。在第二个我需要再次使用对象。
如果我将对象保存在内存中的List中,而不是再次从数据库中检索它们,或者EF是否将它们保存在内存中,因为它们最近被使用过,那么第二次迭代会更快吗?
答案 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)
尝试使用缓存方法,尤其是对于不必经常更改的对象