1

我正在创建一个使用 EF 执行所有数据库任务的 ASP.NET MVC 应用程序。

数据库中有几个相关的表永远不会改变,我正在考虑创建一个静态集合,在第一次请求它时从这两个表中检索数据(它是几百条记录)并将其存储在一个对象中防止每次都访问数据库。

因为我读过几个人说你应该避免在 ASP.NET 中使用静态对象,所以我想知道这是否是一种不好的做法,或者对于这样的场景是否可以接受(只读和少量数据应该可以防止并发问题)。

另外我想知道是否有其他更好的选择来做到这一点。

谢谢。

4

2 回答 2

2

出于完全相同的原因,我已经完成了您计划做的事情。它已经运行了好几年了。

只要确保正确初始化数据,就可以了。初始化时,请记住:

  • 尽可能不要使用锁定(否则你的应用会在你去度假前 2 分钟死锁)
  • 在任何情况下都不能让静态构造函数失败
  • 确保缓存的任何消费者都没有能力修改它

如果数据不是真正静态的,并且您实际上需要经常重新读取它,那么这可能不是最好的解决方案。

万一您想知道,我已经使用这种方法来缓存国家数据、货币数据(基础数据,而不是汇率)、销售单位数据(pcs、m、kg 等)。这些都存储在数据库中,但几乎从不改变。

于 2012-06-26T04:31:01.640 回答
0

使用静态对象不是一个很好的方法。我会使用 RavenDB 之类的东西,它可用于将您的设置或数据库数据存储在内存中。它的占地面积非常小,而且速度非常快。它具有完整的 LINQ 支持。

于 2012-06-26T02:16:53.810 回答