加载上下文

时间:2013-05-11 04:59:01

标签: entity-framework objectcontext

我能否正确理解这一点。

当您运行Web应用程序来查看页面并且您创建上下文的实例时,该实例是否将所有数据库日期加载到其中?

如果确实这样做不会占用大量内存,那么拥有五年博客的博客可能会在其中发布1,500到2,000(或更多),所有评论标签等都会包含大量数据。

那么在创建上下文实例时会发生什么?

1 个答案:

答案 0 :(得分:2)

上下文仅加载您请求的记录,因此当您第一次实例化它时,它将为空,并且在您告知之前不会对数据库执行任何查询。但是,通过它加载的任何实体(通常)都会缓存在上下文中,因此每次运行查询时它们都会使用越来越多的内存,并且随着时间的推移会变得非常大。

出于这个原因,并且因为上下文实例化相对便宜,所以只有在你真正需要它们时才让它们保持活着是个好主意,并在你完成后立即处理它们。这是“工作单元”模式的一部分 - 基本上为每组操作使用新的上下文,这些操作组合在一起作为一个单元或事务。

已编辑添加:

如果您正在执行只读查询(即您只想显示数据,则无需进行更改并将其保存回数据库),您可能会检查非跟踪查询(例如{ {3}}方法,如果您使用DbContext / DbSet,或.AsNoTracking()属性,如果您使用ObjectContext / ObjectSet) - - 这将避免在上下文中缓存结果,提高性能并减少内存使用。

相关问题