希望你们中的一些聪明人能在这里帮我!
我们有一个ASP.NET web服务应用程序,使用实体框架1和EFPocoAdapter。运行这个web服务的应用程序池的使用量在每个web服务调用中都在不断增长。我们目前正在监控它的mem使用情况,一旦它开始超过1GB,我们就回收应用程序池来释放内存。
我们在一个“使用”语句中实例化每个web方法中的对象上下文,这样就不会留下打开的对象上下文(使用efprof观察到)。
因此,我使用蚂蚁内存分析器7来跟踪发生了什么,并且在第一次调用web服务之后(此时EF框架生成它的视图,等等),我已经拍摄了一个快照。然后进行相同的调用并拍摄另一张快照。System.Data.Common.QueryCache.QueryCacheManager. Ants显示,自上次快照以来创建的新对象几乎都与System.Data.Common.QueryCache.QueryCacheManager.相关。
我知道缓存的目的是提高性能,但是在我们的例子中,我认为我们不需要缓存每个查询计划,因为由于主要应用程序/业务的性质,重复这些调用的可能性很小。
所以我的问题..。是否有一种关闭缓存的方法,或者是我在这里乱叫错误的树,还有什么事情我不知道呢?
我已经在网上搜索了这个问题的答案,我所能找到的只有MergeOption属性,它似乎更多地与实体跟踪有关,以提高速度/性能。
发布于 2011-12-13 01:01:50
如果您不修改数据,只需选择它,就可以简单地关闭对象修改跟踪:
datacontext.ObjectTrackingEnabled = false;在与Linq2SQL类似的情况下,它也适用于我。
https://stackoverflow.com/questions/7753311
复制相似问题