假设我有10个“类别”我需要在网络应用程序中引用。目前我将这些类别存储在数据库中,并在我的基页的页面加载期间检索它们(类别名称和ID),将它们存储在哈希表中,然后使用哈希表来引用类别。我意识到每次页面加载都会进行数据库调用。我只需要将这些类别拉出一次,因为它们在给定的会话期间永远不会改变。最好的方法是什么?

  1. 做我正在做的事情,但将其存储为应用程序变量?

  2. 硬编码代码中的类别,并取消数据库?

  3. 将类别存储在会话变量中?仅在会话为空时调用数据库?

  4. 还是其他什么?

  5. 我只是想知道做这些事情的最佳做法是什么。

有帮助吗?

解决方案

如果类别是用户相关的,那么我将它们存储在Session变量中;否则我会使用ASP.NET缓存功能(或首选的分布式缓存)。这使您可以避免命中数据库,同时能够控制缓存类别的时间。

其他提示

调用数据库并不像看起来那么昂贵,典型的网站会在每个页面加载上对数据库进行数十次调用。但如果它在性能方面变得麻烦,请考虑使用ORM解决方案。我想到了优秀的开源 NHibernate ,这是“事实上的”。将数据库映射到类和对象的标准。除了映射之外,它还自动提供两级缓存和连接池。没有太多麻烦,您的网站以压倒性优势胜过其他任何网站。

使用ORM的缺点是什么?对许多人来说,它被认为是一个相当陡峭的学习曲线。如果您想阅读此内容,请务必访问 NHibernate Best Practices 。一开始很难读,但绝对值得。

如果您将NHibernate与 FluentNHibernate 结合使用,则可以轻松使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top