【问题标题】:ASP.NET Output Caching vs ASP.NET Object CachingASP.NET 输出缓存与 ASP.NET 对象缓存
【发布时间】:2012-01-31 23:12:02
【问题描述】:

请您帮我确定以下哪种方案效果最好。

我有 3 个用户控件。 每个控件都需要根据 SQL Server 查询的结果生成内容,例如用户控件 #1 使用查询的输出填充网格视图。

我想利用缓存来减少到我的 SQL Server 数据库的往返次数。 我想出了以下两种解决方案,想知道哪一种效果最好。

场景 #1:

将所有 3 个用户控件的查询放在一个 SQL Server 存储过程(批处理)中,在包含页面内的用户控件之外执行存储过程,然后为每个用户控件提供其查询输出。 通过将所有 3 个查询放在一个存储过程中,可以减少到数据库的往返次数。
在这种情况下,缓存将通过缓存存储过程的输出来实现。 因此,每次都会从内存中取出存储过程的输出,为每个用户控件提供它的输出,之后每个用户控件都会产生它的输出。 ASP.NET 对象缓存将缓存大约 188 个不同版本的查询。

场景 #2:

在每个用户控件内单独查询 SQL Server 数据库,然后使用每个用户控件获得的查询结果生成每个用户控件的输出。 这意味着每个用户控件将单独调用 SQL Server 数据库。 在这种情况下,缓存将通过缓存每个用户控件的输出来实现,因此用户控件不必每次都生成其输出,并且可以直接从内存中获取其输出。 在这种情况下,需要缓存一个或多个用户控件的大约 188 个不同版本。

提前致谢

【问题讨论】:

  • 两个快速问题:1) 三个数据库调用中有多少重叠?控件是否共享任何公共数据?,2)控件是否有可能推迟对数据库的回调,或者所有三个控件总是加载?

标签: asp.net sql sql-server-2008 caching sqlcachedependency


【解决方案1】:

无论哪种方式,您都必须缓存 188 个版本的数据。我的投票是:输出缓存 - 因为它需要更少的处理来生成 HTML(即包含在 aspx 页面中;毕竟,这是最终目标),与在内存中实现几乎完全相同缓存已完成(仅需要更多处理时间,因为缓存数据必须在每次单个用户请求时转换为 HTML,这将远远超过 188 次)。

您显然了解输出缓存的工作原理以及如何根据请求 url(查询)缓存不同版本的 HTML。

【讨论】:

    【解决方案2】:

    我认为这两种情况不一定相互排斥。如果您愿意,应该没有理由不能提取 SQL 查询逻辑,然后将输出缓存与控件一起使用。

    同样,尽管根据数据更改的频率以及开始获取数据的成本,它确实会发生很大的变化。例如,您的问题中没有任何内容表明您无法进行单个数据库调用来获取所有数据(适用于所有版本)并将其保存在 App 缓存中,然后根据需要生成控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2011-06-16
      • 2012-08-15
      • 2011-01-26
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多