我在阅读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,或者我只是设置{{1对于数据上下文的特定实例以及随后的时间,我将实例化一个新的数据上下文,ObjectTrackingEnabled
的值将恢复为其默认状态ObjectTrackingEnabled
?
注意:我只计划添加false
来阅读操作。
感谢。
答案 0 :(得分:8)
ObjectTrackingEnabled控制您的数据上下文(在您的情况下为TheDC
)是否会在加载后跟踪实体的更改。您是否想要,取决于您的具体情况。
自然地,让数据上下文执行的操作会更少,这样可以加快速度,但代价是通过跟踪更改为加载带来负担。为什么变更跟踪很酷?因为你可以:
SaveChanges
并让数据上下文找出对修改后的实体进行UPDATE查询,为已删除的实体执行DELETE等等。禁用更改跟踪后,您必须明确告知上下文更改内容,新值是什么等等。
假设您仍然不想要对象跟踪,则会在每个特定数据上下文实例上设置该属性。这意味着您必须:
this.Configuration.AutoDetectChangesEnabled = true;
有关详细信息,请参阅this blog post 希望这有帮助!
答案 1 :(得分:2)
参考:
1)如果我想添加性能增强,我只需添加行ObjectTrackingEnabled = true; just before the line var TheQuery = (...).ToList();
查询性能增强来自NOT跟踪。
因此,您希望在为此目的创建新的datacontext之后立即在READ
个查询中禁用此功能。
ObjectTrackingEnabled = FALSE
答案 2 :(得分:0)
您的标签和主题标题是' Linq2SQL'但你的问题是关于Entity Framwork。
对于传统的' Linq2SQL你需要这个:
linq2SqlDBContext.ObjectTrackingEnabled = false;