2011-03-14 37 views
0

假设我需要从数据库中填充4或5个下拉菜单项。每个下拉菜单中都会有15个项目。这些项目几乎从不改变。查询数据库或缓存小型结果集的性能更佳?

现在,我可以在每次访问页面时查询数据库,或者我可以从自定义类中获取值,以检查它们是否已经存在于ASP.Net的缓存中,并且仅当它们不查询数据库更新缓存。

这是微不足道的,我写的,但我不能确定的服务表现会更好与否。我想认为它会(虽然不可能有任何巨大的)。

您认为如何?

回答

6

当性能问题时,你应该总是:

  1. 首先做的事情简单办法(避免过早优化)
  2. 性能与设定绩效目标(例如200毫秒的响应时间测试代码在N concurent用户的负载)
  3. 然后,IF您的代码不进行再分析代码,以确定哪些是缓慢的,并配置您的建议PERFORMA nce修正了准确测量真实世界性能变化的内容。

说了这么一句话,是的,你的建议似乎很明智(你通常会期望内存中的缓存比数据库更快),但是它也取决于返回什么数据,内存是什么您的应用程序的负载,查询多么昂贵的是什么查询参数等等

你应该表现测试更改之前和之后,确定更改的实际效果(包括像记忆负荷),并且只有在确定这些下拉列表是造成不可接受的性能问题的原因后,才应该真的这样做。

+1

同意。只有在数据库速度太慢时才会缓存,并且无法进一步加速。 – Ben 2011-03-14 08:07:51

0

IO通常比存储器操作更昂贵(按数量级)。特别是如果你的数据库在另一台机器上,那么你甚至会使用网络资源,并且只使用缓存肯定会更快。

不过说实在的,优化到底什么时候你真的测量确定它为一个性能瓶颈。

0

快速回答你的问题:

  1. 使用内置在.net中缓存。

附加的考虑点上..

  1. 优选地,检索在单个数据库中检索所有主数据(认为存储过程和数据集):虽然,我不主张使用存储的特效的在全部的情况。
  2. 正如你所说的,确保你的数据访问层在进行数据库往返之前检查缓存
  3. 另外,因为你的下拉值不会经常改变;请记住保持很长的期限
  4. 最后,根据您的页面设计,您还可以看看片段缓存(部分页面缓存:用户控件),它可以给您更大的好处,因为您既不访问数据缓存也不访问数据库。

性能: 此外,与直接往返取回主数据相比,性能更多取决于应用程序的负载。简而言之,正如Thomas建议使用缓存类一样!