通常,应用程序可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高性能。例如,如果应用程序使用复杂的逻辑来处理大量数据,然后再将数据作为用户频繁访问的报表返回,避免在用户每次请求数据时重新创建报表可以提高效率。同样,如果应用程序包含一个处理复杂数据但不需要经常更新的页,则在每次请求时服务器都重新创建该页会使工作效率低下。
在这些情况下,为了提高应用程序的性能,ASP.NET 使用两种基本的缓存机制来提供缓存功能。第一种机制是应用程序缓存,它允许您缓存所生成的数据,如 DataSet 或自定义报表业务对象。第二种机制是页输出缓存,它保存页处理输出,并在用户再次请求该页时,重用所保存的输出,而不是再次处理该页。
本文主要介绍怎么使用页面缓存:
一、为 SQL 缓存通知启用数据库和数据库表(启用缓存数据所依赖的数据库和表)
在命令行中输入如下命令:
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_regsql.exe -S 服务器地址(可以为.或localhost) -U 用户名 -P 密码-ed -d 数据库名 -et -t 表名
aspnet_regsql命令的参数介绍(要注意参数的大小写):
参数 | 参数意义 |
-? | 显示该工具的帮助功能. |
-S | 后接的参数为数据库服务器的名称或者IP地址,如 ./INSTANCENAME 。 |
-U | 后接的参数为数据库的登陆用户名. |
-P | 后接的参数为数据库的登陆密码 |
-E | 当使用windows集成验证时,使用该功能 |
-t | 后接参数为对哪一个表采用sqlcachedependency功能。 |
-d | 后接参数为对哪一个数据库采用sqlcachedependency功能 |
-ed | 允许对数据库使用sqlcachedependency功能 |
-dd | 禁止对数据库采用sqlcachedependency功能 |
-et | 允许对数据表采用sqlcachedependency功能 |
-dt | 禁止对数据表采用sqlcachedependency功能 |
-lt | 列出当前数据库中有哪些表已经采用sqlcachedependency功能 |
下图是用aspnet_regsql 命令来通知SQL Server,启用本地服务器中的数据库hyEQArch中表T_Ups的缓存。数据库服务器用户名是sa,密码为空。
当完成上述操作后,可以在数据库中发现,多了一个表AspNet_SqlCacheTablesForChangeNotification,该表中存储了需要缓存的表的信息:tablename表示要进行缓存的数据库表名,notificationCreated是开始追踪的时间,changeId是指该表已经变化了多少次,int型的,该表的数据每变化一次,该字段值就加1。
二、在应用程序web.config文件中配置sqlCacheDependency缓存
配置示例代码如下:
需要注意的几点:1.pollTime参数是指设置系统多长时间去检查一次cache中的数据是否需要更新,其单位是毫秒(ms),最小值是500;2.<databases>节点中name是指要缓存的数据库名称,connectionStringName是数据库连接字符串的名称,必须与上面<connectionStrings>中申明的名称一致。
三、在页面文件中申明和设置缓存
参数说明:Duration表示缓存的时间,单位是秒;VaryByParam表示获取查询字符串或窗体 POST 参数的逗号分隔列表,该列表由输出缓存用来改变缓存项。如果没有参数的话,应该将值设置为none;SqlDependency标识缓存项依赖的一组数据库和表名称对。如果更新或更改了表的数据,则缓存项过期。其赋值形式“数据库名:表名,数据库名:表名”,其中的数据库名必须与第二步web.config的文件中.<databases>节点申明的数据库名称一致,表名则必须是第一步中启用的缓存依赖的表。
这样,数据缓存就设置好了,系统会根据上述步骤中设置的缓存时间来进行数据的缓存。
上面示例操作中,页面的缓存时间是25秒,而系统自动隔10000毫秒(10秒)去跟踪一下申明的数据库中表的数据是否有变化,并根据实际去修改缓存。