3

希望你们中的一些聪明人可以在这里帮助我!

我们有一个使用 Entity Framework 1 和 EFPocoAdapter 的 ASP.NET Web 服务应用程序。运行此 Web 服务的应用程序池的内存使用量在每次 Web 服务调用时都在不断增长。我们目前监控它的内存使用情况,一旦它开始超过 1GB,我们就会回收应用程序池以释放内存。

我们在“using”语句中实例化每个 web 方法中的对象上下文,这样就不会留下开放的对象上下文(用 efprof 观察)。

所以我使用 Ants 内存分析器 7 来跟踪正在发生的事情,在第一次调用 Web 服务之后(此时 EF 框架生成它的视图等),我拍摄了一个快照。然后进行相同的调用并拍摄另一个快照。Ants 显示,自上次快照以来创建的新对象几乎都与 System.Data.Common.QueryCache.QueryCacheManager 相关。

我知道缓存的目的是提高性能,但在我们的例子中,我认为我们不需要缓存每个查询计划,因为由于我们的主要应用程序/业务的性质,重复这些调用的可能性很小。

所以,我的问题.....有没有办法关闭这种缓存,或者我在这里吠叫错误的树并且还有其他事情我不知道?

我在网上搜索了这个问题的答案,我能找到的只是 MergeOption 属性,它似乎与实体跟踪有关,以提高速度/性能。

4

1 回答 1

0

如果不修改数据就选择它,你可以简单地关闭对象修改跟踪:

datacontext.ObjectTrackingEnabled = false;

在与 Linq2SQL 类似的情况下,它对我有用。

于 2011-12-13T01:01:50.080 回答