Asp.net - 用于存储字典的缓存与静态变量

时间:2009-08-20 19:35:12

标签: c# asp.net caching

我正在建立一个包含许多部门和类别的网上商店。它们存储在我们的数据库中并经常访问。

我们正在使用URL重写,因此商店中的每个请求几乎都会生成查找。我们还需要经常迭代数据以生成主存储和部门页面的菜单。

此信息不会经常更改,所以我认为我应该将数据库加载到字典中以加快信息检索。

我知道标准的做法是将数据加载到应用程序缓存中,但是我假设在缓存期间会出现一定程度的序列化,而对于大型数据结构,我认为开销会很大。

我对此的冲动是将字典放在一个相关类中的静态变量中。但是我想在此获得一些输入输入。我认为这种方法会更快吗?这是一种可怕的做法吗?有没有更好的方法让我失踪?

我似乎无法找到关于此的更多信息,我真的很感激您可以分享的任何信息。谢谢!

4 个答案:

答案 0 :(得分:20)

Application和Cache集合不会序列化您传递给它们的对象,它们存储实际的引用。无论对象有多大,从Cache中检索对象都不是一项昂贵的操作。始终坚持使用Cache对象,除非你有充分的理由不这样做,这只是一个很好的做法。

唯一值得一提的是确保您考虑对此集合进行多线程访问。如果你没有正确锁定,你很快就会遇到一些严重的问题

答案 1 :(得分:4)

好吧,如果需要这样做,我认为重写代码以使用静态字段而不是应用程序缓存是不是很重要。我个人首先使用缓存。没有必要进行过早优化,您是否测量过性能?它可能与应用程序缓存对象一样正常。也许它甚至适用于db查询? :)

所以,我的答案是 - 使用缓存并查看它是如何工作的。

答案 2 :(得分:3)

memcached是你的朋友! (但如果你没有扩展,可能会有点过分)

知道您的字典在应用程序缓存中有多大?我很想推荐这是一个很好的第一选择。

答案 3 :(得分:0)

恕我直言,一般来说,如果你能控制底层对象的更新,你应该使用静态存储。否则,如果您依赖第三方API进行数据检索,请使用缓存技术。