Entity Framework 3.1 中跟踪的开销是多少?

What is the overhead of tracking in Entity Framework 3.1?

注意:这是 What is the overhead of Entity Framework tracking? 的跟进,它询问了 Entity Framework.

的一个相当旧的版本

与我一起工作的一个团队使用了 no tracking behavior at global level 而不是上下文或查询级别。这导致存储库中出现奇怪的代码,因为所有注入的上下文实例都没有被跟踪:添加需要手动附加,更新必须显式和其他一些与导航属性相关的显式代码。

当被问及此事时,他们援引了性能原因,但没有指明来源。

我的解决方案是在上下文实例级别不使用跟踪。这将删除几乎所有与保存更改相关的繁琐代码,唯一的问题是程序员忘记为实例设置无跟踪。我的假设是在正常情况下(数百个模型的树)不会有这么大的问题。

This article 表明系统使用无跟踪和所有跟踪之间存在很大差异(内存和 CPU),但不清楚是否仅与此有关(差异似乎很大比跟踪所需的克隆数据更大)。

问题: Entity Framework 3.1 中跟踪的开销是多少?

What is the overhead of tracking in Entity Framework 3.1?

这与手动将您查询的每个实体附加到更改跟踪器完全相同。

您还可以使用 .AsTracking() 选择跟踪单个查询。