有哪些方法可以优化ASP.NET缓存的使用?

时间:2009-02-27 14:02:56

标签: asp.net optimization caching

我一直在阅读有关此主题的内容,但我很想知道优化ASP.NET缓存使用的最佳方法是什么,以及有关如何确定应该使用哪些内容的一些提示并且不应该进入缓存。另外,有没有任何经验法则可以确定缓存中应该说多长时间?

5 个答案:

答案 0 :(得分:1)

一些经验法则

  • 每次考虑使用缓存时,请考虑缓存未命中请求率。如果该项目的缓存请求将在大多数时间内丢失,那么收益可能不会超过维护该缓存项目的成本
  • 考虑查询费用与缓存检索费用(例如,对于简单读取,由于序列化成本,SQL Server通常比分布式缓存更快)

一些技巧

  • 在将字符串粘贴到缓存中之前gzip字符串。在分布式缓存情况下有效扩展缓存并减少网络流量
  • 如果您担心缓存聚合的时间(例如计数),请考虑使用非过期(或长期)缓存聚合,并在更改基础数据时主动更新这些聚合。这是一种有争议的技术,您应该在继续之前考虑您的请求/失效率,但在某些情况下,这些好处是值得的(例如,根据实施细节,每个用户的SO代表可能是一个好的候选人,未解答的SO问题的数量会可能是一个可怜的候选人)

答案 1 :(得分:1)

尚未实现缓存。

推迟,直到您耗尽所有索引,查询调整,页面简化以及其他更多提升性能的行人方式。如果你在最后的手段之前翻转缓存,那么你将更难以找出性能瓶颈所在的位置。

当然,如果你在最后开启缓存的情况下调整了后端,那么它的工作时间会比你今天的工作时间长很多。

答案 2 :(得分:0)

我听过关于性能调整和缓存的最好的引用是它是一门艺术而不是一门科学,抱歉不记得是谁说的但是这里的重点是有很多因素可以影响您需要逐个评估每种情况的应用程序的性能,并在达到预期结果之前对该案例进行考虑调整。

我意识到我在这里没有提供任何细节,但我认为你不能

我将举一个前面的例子。我开发了一个应用程序,该应用程序对web服务进行了大量调用,以构建客户端配置文件,例如。

  • 获取客户
  • 获取客户报价
  • GET客户报价

Web服务返回的每个对象都贡献了一个更高级别的对象,然后用于构建结果页面。首先,我们将所有对象收集到主对象中并缓存它。然而,我们意识到当事情没有我们想要的那么快时,单独缓存每个被调用对象会更有意义,这样它就可以在客户端看到的下一页上重复使用。

  • [缓存]客户端
  • [缓存]客户引用
  • [缓存]客户报价
  • 获取客户报价升级

答案 3 :(得分:0)

不幸的是,没有预先建立的规则......但是为了给你一个常识,我会说你可以轻松缓存:

  • 应用程序参数(国家/地区列表,电话代码等)
  • 任何其他应用程序非易失性数据(即使可配置的角色列表)
  • 经常阅读并且变化不大的商业数据(如果不是100%准确,则不是很大)

你不应该缓存的内容:

  • 频繁更改的易失性数据(通常是业务数据)

对于缓存持续时间,我倾向于使用不同的持续时间,具体取决于数据类型及其大小。应用程序参数可以缓存几个小时甚至几天。

对于某些商业数据,您可能希望缓存持续时间较短(几分钟到1小时)

最后一件事总是要挑战你操纵的数据量。请记住,最终用户不会同时阅读数千条记录。

希望这会给你一些指导。

答案 4 :(得分:0)

很难概括这类事情。唯一要遵循的硬性规则是不要浪费时间优化某些事情,除非你知道需要完成。然后,正确的行动方式将非常依赖于您的应用程序的细节。

那说......我几乎总是将一些易用的对象缓存全局应用程序参数。这当然更多的是编程方便而不是优化。

有一次我编写了特定的数据缓存代码,用于与非常慢的会计数据库连接的应用程序,然后它对于不经常更改的数据是只读的。所有的写入都归到了DB。使用SQL Server,我从来没有遇到内置的ASP.NET-to-SQL Server接口是这个等式的缓慢部分的情况。