Entity framework 加载上下文

Entity framework 加载上下文,entity-framework,objectcontext,Entity Framework,Objectcontext,请问我理解对了吗 当您运行web应用程序查看页面并创建上下文实例时,该实例是否正在将所有数据库日期加载到其中 如果它不占用大量内存,一个拥有五年博客的博客可能会有1500到2000篇(或更多)的帖子,以及所有的评论标签等,这将是大量的数据 那么,当您创建上下文实例时会发生什么情况呢?上下文只加载您请求的记录,因此当您第一次实例化一条记录时,它将是空的,并且在您告诉它之前不会对数据库执行任何查询。但是,通过它加载的任何实体(通常)都会缓存在上下文中,因此每次运行查询时,它们都会使用越来越多的内存,

请问我理解对了吗

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

如果它不占用大量内存,一个拥有五年博客的博客可能会有1500到2000篇(或更多)的帖子,以及所有的评论标签等,这将是大量的数据


那么,当您创建上下文实例时会发生什么情况呢?

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

出于这个原因,并且由于实例化上下文的成本相对较低,所以最好只在您实际需要它们时保持它们的活动状态,并在完成后尽快将它们处理掉。这是“工作单元”模式的一部分——基本上为作为一个单元或事务一起进行的每一组操作使用一个新的上下文

编辑以添加:


如果您正在执行只读查询(即,您只想显示数据,不需要进行更改并将其保存回数据库),则可以签出非跟踪查询(例如,如果使用的是
DbContext
/
DbSet
,则为方法;如果使用的是
ObjectContext
/
ObjectSet
,则为属性)--这将避免在上下文中缓存结果,提高性能并减少内存使用。

感谢您的帮助,我需要更改代码,使其仅在需要时打开上下文。页面加载时打开上下文,加载完成后再次关闭上下文,这可能意味着我确实有一个非常大的上下文。ThaNKSA实际上,这是一种非常常见的方法——每页请求一个上下文。除非您正在进行大量处理,否则通常可以。它使用一些内存,但它也可以有一些优点,如避免重复的数据库查询,希望整件事都能很快结束。真正的危险是如果您尝试共享一个上下文整个应用程序的上下文(以便它在请求之间保持不变)——然后它可能会严重膨胀,出现额外的并发问题,并且内存不会被释放。感谢您,这节省了管理员添加和处理上下文一周的工作