我使用AsNoTracking()
并且知道在使用它时禁用了第一级缓存。但是如何使用AsNoTracking()
来提高性能呢?使用它有什么好处?
答案 0 :(得分:39)
AsNoTracking()
表示ObjectContext实例不会在本地缓存实体。这有一些实际的好处:
内存使用:由于ObjectContext在返回给你之后没有引用实体,垃圾收集器可以在你不再引用时立即删除它们他们。通常,在发生这种情况之前需要处理ObjectContext。
性能:由于EF不必尝试将数据库返回的每个记录与身份映射中的本地实体进行匹配,因此查询执行速度可能会稍快一些。
货币:由于查询返回直接从数据库结果中实现的实体,并且不依赖于本地缓存,因此返回的实体应始终反映数据库中的最新值。
无状态:由于ObjectContext未跟踪实体,因此您可以无限期地继续使用相同的ObjectContext实例进行只读查询,并且不必受到有关正常建议的约束拥有短暂的ObjectContexts。
AsNoTracking()
是一个好主意。如果你需要更新它们将无法工作,这就是权衡。