【发布时间】: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