Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在使用EF检索和创建对象后,是否应该将其保存在内存中?_C#_Entity Framework - Fatal编程技术网

C# 在使用EF检索和创建对象后,是否应该将其保存在内存中?

C# 在使用EF检索和创建对象后,是否应该将其保存在内存中?,c#,entity-framework,C#,Entity Framework,我正在使用EF从数据库中获取和创建一些对象。我需要在两个不同的迭代中使用这些对象。在第一次迭代中,我从数据库中获取它们。在第二步中,我需要再次使用对象 如果我将对象保存在内存中的列表中,而不是再次从数据库中检索它们,那么第二次迭代会更快吗?或者EF会将它们保存在内存中,因为它们最近被使用过吗?您应该像这样加载内存中的对象,以便使用Local属性访问它们: context.YourTable.Load(); 然后您应该使用Local属性来迭代任意次数 foreach(var obj in co

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


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

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

 context.YourTable.Load();
然后您应该使用
Local
属性来迭代任意次数

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

您还可以使用
ToList()
,这样您的项目将被加载到内存中

如果您不久之后需要它们,为什么不干脆将它们保存在内存中呢?您只存储对对象的引用,这些对象很轻

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

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


如果要将对象持久化超过上下文的生命周期,可以通过将它们缓存在内存中来实现。然后,您可以稍后将它们重新附加到preform更新中

当然,从内存中检索要快得多。顺便说一句,如果您想从内存中获取对象,您不必将其存储在列表中,只需使用EF功能之一。

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

最好提供一个示例,但不清楚第一次迭代和第二次迭代之间的区别。将对象保存在列表中是什么意思?是的,我也看不出问题所在。答案似乎很明显。但你可能会要求EF为你提供所有不同的可能性?