【问题标题】:Best practice for loading and using dictionary items?加载和使用字典项目的最佳实践?
【发布时间】:2010-12-10 07:37:22
【问题描述】:

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

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

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

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

  4. 还是别的什么?

我只是想知道做这些事情的最佳实践是什么。

【问题讨论】:

    标签: c# .net asp.net dictionary hashtable


    【解决方案1】:

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

    【讨论】:

    • 谢谢。实际上,老实说,这些类别永远不会改变——它们在应用程序的生命周期内总是相同的。除非业务需求发生变化……您还推荐缓存吗?将类别设为枚举会很难看吗?
    • 这实际上取决于有多少对象依赖于与您的类别对象的关系。如果该类别在一个地方使用,并且仅在一个地方使用(未报告),那么我肯定会考虑简单地使用 smallint 和枚举,但是如果它用于多个对象或用于 SQL 报告例如服务然后我会把它保存在数据库中。就个人而言,枚举有它们的位置。但是我不确定这是其中之一:)
    【解决方案2】:

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

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

    如果您将 NHibernate 与 FluentNHibernate 结合使用,使用起来会变得轻而易举。

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      • 2010-09-27
      • 2012-05-22
      • 1970-01-01
      • 2012-01-05
      相关资源
      最近更新 更多