20

我使用AsNoTracking()并知道一级缓存在使用时被禁用。但是使用如何AsNoTracking()提高性能呢?使用它有什么好处?

4

1 回答 1

43

AsNoTracking()意味着实体不会被 ObjectContext 实例在本地缓存。这有一些实际的好处:

  1. 内存使用:由于 ObjectContext 在返回给您后并未引用实体,因此垃圾收集器可以在您不再引用它们时立即删除它们。通常,ObjectContext 需要在这发生之前被释放。

  2. 性能:由于 EF 不必尝试将从数据库返回的每条记录与身份映射中的本地实体进行匹配,因此您的查询可能会执行得稍快一些。

  3. 货币:由于查询直接从数据库结果中返回实体,并且不依赖于本地缓存,因此返回的实体应始终反映数据库中的最新值。

  4. 无状态:由于 ObjectContext 不跟踪实体,因此您可以无限期地继续使用相同的 ObjectContext 实例进行只读查询,并且不必受到有关拥有短期 ObjectContexts 的常规建议的限制。

AsNoTracking()如果您只查询实体,这是一个好主意。如果您需要更新它们,它将无法工作,这就是权衡。

于 2013-01-25T20:20:51.287 回答