实体框架:缓存管理?
我在 WCF 服务后面使用 Entity Framework 4.0。我的问题是程序使用的内存增长了很多(从 200Mo 开始,我在 ~1.1Go 处停止了。
我如何管理缓存?我的意思是,我有两个数据上下文,其中一个从未使用过读取数据,那么我可以禁用缓存吗?
另外,我可以指定它可以使用的空间量吗?有没有办法使用更少的资源
?
I'm using Entity Framework 4.0 behind WCF services. My problem is that the memory used by the programm is growing a lot(start à 200Mo, and I stopped it at ~1.1Go.
How can I manage the cache? I mean, I've two datacontext, one of them is never used to read data, so can I disable the cache?
And for the other, can I specify the amount of space it cans use? Is there a way to monitor these resources? Is there a way to use less resources?
Thank you!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,您不应该使用共享上下文。为每个 WCF 请求创建新上下文,并在结束操作处理之前释放上下文!如果您需要一些数据缓存,请在 EF 之外进行。 EF 本身不应该用作缓存,并且无法控制此行为。
如果您在 IIS 中托管服务,则可以通过在 AppPool 的高级设置中指定专用内存限制来配置 AppPool 回收。但它只会杀死该应用程序池中运行的所有内容。
First of all you should not use shared contexts. Create new context for each WCF request and dispose context before you end your operation processing! If you need some data caching do it outside of EF. EF itself is not supposed to be used as cache and there is no control of this behavior.
If you host your service in IIS you can configure AppPool recycling by specifying Private Memory Limit in advanced settings of the AppPool. But it will simply kill everything running in that AppPool.
可能发生的情况是每次调用都会创建一个新的上下文。它保留在内存中,直到连接超时并且垃圾收集将其删除。
What may be happening is that each call is creating a new context. Which remains in memory untill the connection timesout and the Garbage collection removes it.