我读到here在查询数据以执行读取操作时,将ObjectTrackingEnabled设置为false会在一定程度上提高性能。我的问题是这样的:

public return type TheQueryName (some parameters)
{
   using (TheDC MyDC = new TheDC())
   {
       var TheQuery = (...).ToList();

       return TheQuery;
   }
}

1)如果我想添加性能增强,我是否只在ObjectTrackingEnabled = true;行之前添加var TheQuery = (...).ToList();行?
2)另外,如果我在查询中将ObjectTrackingEnabled设置为true,那么在返回之前是否需要将其设置为false,或者我只是为数据上下文的特定实例设置ObjectTrackingEnabled,然后我将实例化一个新的数据上下文,ObjectTrackingEnabled的值将恢复为其默认状态false
注意:我只计划添加ObjectTrackingEnabled = false;来读取操作。
谢谢。

最佳答案

objecttrackingenabled控制数据上下文(TheDC在您的情况下)是否在加载实体后跟踪它们的更改。你要不要看你的具体情况。
当然,让数据上下文做更少的事情会使它运行得更快,但代价是让您承担跟踪更改的负担。为什么更改跟踪很酷?因为你可以:
从某个上下文加载一些实体
修改它们
添加新的,删除其他
调用SaveChanges并让数据上下文计算出对修改的实体执行更新查询,对删除的实体执行删除等操作
禁用更改跟踪后,必须明确告诉上下文更改了什么、新值是什么等等。
假设您仍然不需要对象跟踪,则在每个特定的数据上下文实例上设置该属性。这意味着你必须:
为您创建的每个数据上下文手动设置
在上下文的构造函数中将其设置为上下文的默认值,如下所示:this.Configuration.AutoDetectChangesEnabled = true;有关详细信息,请参见this blog post
希望这有帮助!

09-10 08:53