ASP.NET输出缓存与ASP.NET对象缓存

ASP.NET输出缓存与ASP.NET对象缓存,asp.net,sql,sql-server-2008,caching,sqlcachedependency,Asp.net,Sql,Sql Server 2008,Caching,Sqlcachedependency,你能帮我决定以下哪种方案最有效吗 我有3个用户控件。 每个控件都需要根据SQL Server查询的结果生成内容,例如,用户控件#1使用查询的输出填充gridview 我想利用缓存来减少对SQL Server数据库的往返。 我提出了以下两个解决方案,并想知道哪一个效果最好 情景1: 将所有3个用户控件的查询放在一个SQL Server存储过程中(批处理),在包含页内的用户控件外部执行存储过程,然后为每个用户控件提供其查询输出。 通过将所有3个查询放在一个存储过程中,可以减少对数据库的往返访问。 在

你能帮我决定以下哪种方案最有效吗

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

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

情景1:

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

情景2:

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


提前感谢

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


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

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

同样,根据数据更改的频率和获取数据的成本,它的变化会更大。例如,您的问题中没有任何内容表明您不能通过一次DB调用来获取所有数据(对于所有版本)并将其保存在应用缓存中,然后根据需要生成控件。

两个快速问题:1)三个DB调用中有多少重叠?控件是否共享任何公共数据?、2)控件是否可以将这些调用延迟回db,或者是否始终加载所有三个控件?