假设我需要在网络应用中引用一些10个“类别”。目前我将这些类别存储在数据库中,并在我的基页的页面加载期间检索它们(类别名称和ID),将它们存储在哈希表中,然后使用哈希表来引用类别。我意识到每次页面加载都会进行数据库调用。我只需要将这些类别拉出一次,因为它们在给定的会话期间永远不会改变。最好的方法是什么?
做我正在做的事情,但将其存储为应用程序变量?
硬编码代码中的类别,并取消数据库?
将类别存储在会话变量中?仅在会话为空时调用数据库?
还是其他什么?
我只是想知道做这些事情的最佳做法是什么。
答案 0 :(得分:2)
如果类别是用户相关的,那么我将它们存储在Session变量中;否则我会使用ASP.NET缓存功能(或首选的分布式缓存)。这使您可以避免命中数据库,同时能够控制缓存类别的时间。
答案 1 :(得分:0)
调用数据库并不像看起来那么昂贵,典型的网站会在每个页面加载上对数据库进行数十次调用。但如果它在性能方面变得麻烦,请考虑使用ORM解决方案。我想到了优秀的开源NHibernate,这是将数据库映射到类和对象的“事实上的”标准。除了映射之外,它还自动提供两级缓存和连接池。没有太多麻烦,您的网站以压倒性优势胜过其他任何网站。
使用ORM的缺点是什么?对许多人来说,它被认为是一个相当陡峭的学习曲线。如果您想阅读此内容,请务必访问NHibernate Best Practices。一开始很难读,但绝对值得。
如果将NHibernate与FluentNHibernate结合使用,则可以轻松使用。