asp.net服务器端缓存机制 适用范围 的介绍 --提高性能
asp.net自带的缓存机制已经实现的很完善,只需要我们去灵活运用. 本文对System.Web.Caching.Cache,HttpContext.Items和输出缓存的概念和各自的适用范围进行了介绍.
System.Web.Caching.Cache
asp.net专门提供了cache对象,每个应用程序域中存在唯一的cache实例,当应用程序启动时创建该cache(比如IIS重启时),cache和application很像(这里的appication和HttpApplication不一样,在AppDomain中前者是唯一的,后者不是),都可以保存全局的数据,只是cache提供专门用于缓存管理的特性,依赖和过期策略.
主要包括文件依赖,键值依赖,数据库依赖,基于时间的过期策略.
cache存在于应用程序域的整个周期,只有当服务器内存不足时,会自动依照优先级清除cache中的数据.当你重启应用程序服务器时,将清空cache,重新建立新的cache.
System.Web.Caching.Cache缓存类,可以通过System.Web.HttpRuntime.Cache或System.Web.UI.Page和System.Web.HttpContext.Cache进行访问,两者都是指向同一个Cache实例.因此需要构造好唯一的键解决冲突.Cache同样可以用于非web应用程序中.
根据metadata的注释:两者之间的区别是System.Web.HttpRuntime.Cache指用于当前程序的cache.
System.Web.HttpContext.Cache是用于前应用程序域的cache.多了请求上下文.
(纳闷了,不是说一个应用程序域只有一个cache实例,HttpApplication实例池共享这个cache实例,但是当前程序的cache是什么,一个程序不就是在一个应用程序域中运行么?)
HttpContext.Items
HttpContext.Items是一种类似的缓存存储方式,但是在HttpContext.Items缓存的内容只对当前的请求有效,一旦请求完成,在新的请求中将被清空.它的生命周期就是页面请求的生命周期.用于短暂的缓存数据.现在越来越多的站点使用用户控件,自定义控件或自定义类库来构建应用程序,若它们之间所需的数据来自同一种数据查询,就可以通过HttpContext.Items进行缓存.
HttpContext.Items的缺点是必须在基于web的应用程序中才能使用,如果你想在数据访问层中使用,以便让表现层的控件们共享到缓存,那么只能在数据访问层和表现层之间添加一个web层.
输出缓存
分为页面输出缓存(Page Output Cache)和页面片断缓存(Page Fragment Cache) 当整个页面相对变化较少时,使用页面缓存,如果只是页面的一部分经常变化,使用片断缓存。
页面级缓存指缓存整个页面,可以有通过页面OutputCache或HTTPCachePolicy类实现.可以详细的指定缓存依赖策略,缓存的存放地点,持续时间等.
页面片段级缓存指对用户控件,自定义控件等进行缓存.
如将页面的缓存时间设为60,在服务器端缓存,VaryByParam="none".则在服务器端将缓存60s,在这缓存的时间内,若有新的请求将返回缓存的内容.它的作用范围也是整个应用程序域,很有可能也是System.Web.Caching.Cache的加强版.
不正确之处 还请提出 Created by jecray
System.Web.Caching.Cache
asp.net专门提供了cache对象,每个应用程序域中存在唯一的cache实例,当应用程序启动时创建该cache(比如IIS重启时),cache和application很像(这里的appication和HttpApplication不一样,在AppDomain中前者是唯一的,后者不是),都可以保存全局的数据,只是cache提供专门用于缓存管理的特性,依赖和过期策略.
主要包括文件依赖,键值依赖,数据库依赖,基于时间的过期策略.
cache存在于应用程序域的整个周期,只有当服务器内存不足时,会自动依照优先级清除cache中的数据.当你重启应用程序服务器时,将清空cache,重新建立新的cache.
System.Web.Caching.Cache缓存类,可以通过System.Web.HttpRuntime.Cache或System.Web.UI.Page和System.Web.HttpContext.Cache进行访问,两者都是指向同一个Cache实例.因此需要构造好唯一的键解决冲突.Cache同样可以用于非web应用程序中.
根据metadata的注释:两者之间的区别是System.Web.HttpRuntime.Cache指用于当前程序的cache.
System.Web.HttpContext.Cache是用于前应用程序域的cache.多了请求上下文.
(纳闷了,不是说一个应用程序域只有一个cache实例,HttpApplication实例池共享这个cache实例,但是当前程序的cache是什么,一个程序不就是在一个应用程序域中运行么?)
HttpContext.Items
HttpContext.Items是一种类似的缓存存储方式,但是在HttpContext.Items缓存的内容只对当前的请求有效,一旦请求完成,在新的请求中将被清空.它的生命周期就是页面请求的生命周期.用于短暂的缓存数据.现在越来越多的站点使用用户控件,自定义控件或自定义类库来构建应用程序,若它们之间所需的数据来自同一种数据查询,就可以通过HttpContext.Items进行缓存.
HttpContext.Items的缺点是必须在基于web的应用程序中才能使用,如果你想在数据访问层中使用,以便让表现层的控件们共享到缓存,那么只能在数据访问层和表现层之间添加一个web层.
输出缓存
分为页面输出缓存(Page Output Cache)和页面片断缓存(Page Fragment Cache) 当整个页面相对变化较少时,使用页面缓存,如果只是页面的一部分经常变化,使用片断缓存。
页面级缓存指缓存整个页面,可以有通过页面OutputCache或HTTPCachePolicy类实现.可以详细的指定缓存依赖策略,缓存的存放地点,持续时间等.
页面片段级缓存指对用户控件,自定义控件等进行缓存.
如将页面的缓存时间设为60,在服务器端缓存,VaryByParam="none".则在服务器端将缓存60s,在这缓存的时间内,若有新的请求将返回缓存的内容.它的作用范围也是整个应用程序域,很有可能也是System.Web.Caching.Cache的加强版.
不正确之处 还请提出 Created by jecray
