假设我需要从数据库中填充4或5个下拉菜单项。每个下拉菜单中都会有15个项目。这些项目几乎从不改变。查询数据库或缓存小型结果集的性能更佳?
现在,我可以在每次访问页面时查询数据库,或者我可以从自定义类中获取值,以检查它们是否已经存在于ASP.Net的缓存中,并且仅当它们不查询数据库更新缓存。
这是微不足道的,我写的,但我不能确定的服务表现会更好与否。我想认为它会(虽然不可能有任何巨大的)。
您认为如何?
假设我需要从数据库中填充4或5个下拉菜单项。每个下拉菜单中都会有15个项目。这些项目几乎从不改变。查询数据库或缓存小型结果集的性能更佳?
现在,我可以在每次访问页面时查询数据库,或者我可以从自定义类中获取值,以检查它们是否已经存在于ASP.Net的缓存中,并且仅当它们不查询数据库更新缓存。
这是微不足道的,我写的,但我不能确定的服务表现会更好与否。我想认为它会(虽然不可能有任何巨大的)。
您认为如何?
当性能问题时,你应该总是:
说了这么一句话,是的,你的建议似乎很明智(你通常会期望内存中的缓存比数据库更快),但是它也取决于返回什么数据,内存是什么您的应用程序的负载,查询多么昂贵的是什么查询参数等等
你应该表现测试更改之前和之后,确定更改的实际效果(包括像记忆负荷),并且只有在确定这些下拉列表是造成不可接受的性能问题的原因后,才应该真的这样做。
这就是存在System.Web.Helpers.WebCache类。
IO通常比存储器操作更昂贵(按数量级)。特别是如果你的数据库在另一台机器上,那么你甚至会使用网络资源,并且只使用缓存肯定会更快。
不过说实在的,优化到底什么时候你真的测量确定它为一个性能瓶颈。
快速回答你的问题:
附加的考虑点上..
性能: 此外,与直接往返取回主数据相比,性能更多取决于应用程序的负载。简而言之,正如Thomas建议使用缓存类一样!
同意。只有在数据库速度太慢时才会缓存,并且无法进一步加速。 – Ben 2011-03-14 08:07:51