【发布时间】:2013-01-25 18:03:19
【问题描述】:
我用AsNoTracking(),知道一级缓存在使用的时候是禁用的。但是如何使用AsNoTracking() 来提高性能呢?使用它有什么好处?
【问题讨论】:
标签: entity-framework
我用AsNoTracking(),知道一级缓存在使用的时候是禁用的。但是如何使用AsNoTracking() 来提高性能呢?使用它有什么好处?
【问题讨论】:
标签: entity-framework
AsNoTracking() 表示实体不会被 ObjectContext 实例本地缓存。这有一些实际的好处:
内存使用情况:由于 ObjectContext 在返回给您后并未引用实体,因此垃圾收集器可以在您不再引用实体后立即删除它们他们。通常,需要在这发生之前释放 ObjectContext。
性能:由于 EF 不必尝试将从数据库返回的每条记录与身份映射中的本地实体进行匹配,因此您的查询可能会执行得稍微快一些。
货币:由于查询返回的实体直接从数据库结果中具体化并且不依赖于本地缓存,因此返回的实体应始终反映数据库中的最新值。
无状态:由于 ObjectContext 不会跟踪实体,因此您可以继续无限期地使用相同的 ObjectContext 实例进行只读查询,而不必受到有关以下方面的常规建议的限制拥有短暂的 ObjectContexts。
AsNoTracking() 是一个好主意,如果您只查询实体。如果您需要更新它们,它将无法工作,这就是权衡。
【讨论】:
if you're only querying entities **once**.