【发布时间】:2013-11-03 02:15:32
【问题描述】:
出于性能优化的原因,我正在重构我的 ASP.NET MVC 4 WebAPI 项目。 在我的控制器代码中,我在上下文(DbContext、EF6)中搜索实体。有几千个这样的实体,每小时添加新的实体(即“缓慢”),它们很少被删除(我不在乎是否仍然在上下文的缓存中找到已删除的实体!)并且永远不会修改。
在阅读了this question、this one 的答案以及更多讨论之后,我仍然不确定将单个静态 DbContext 用于上述目的是一个坏主意 - 一个 DbContext 从不更新数据库。
性能方面,我不担心实例化成本,而是担心如果为每个请求创建 DbContext,缓存请求实体的无用。我还使用了二级缓存,这使得上下文的持久性更加敏锐。
我的问题是: 1.无论具体实现如何,在我的情况下,“静态” DbContext 是一个有效的解决方案吗? 2. 如果是这样,实现这种 DbContext 的最合适的方式是什么? 3.我是否应该定期“刷新”上下文以清除缓存以防止 if 变得太大?
【问题讨论】:
-
如果您查看
Dictionary <TKey, TValue>的文档,您会发现它声称只有在读取时才具有线程安全性。DbContext文档中缺少这些声明,因此我们必须假设它不是线程安全的,即使在只读场景中,即使您确保在单线程初始化阶段只查询数据库一次。
标签: entity-framework dependency-injection asp.net-web-api