`
ljzforever
  • 浏览: 117530 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

asp.net 缓存研究

阅读更多

最近因项目要求,需要研究asp.net缓存,可是查阅了书本,msdn,网上后有点失望,真是天下文章一大抄啊,大家

讲来讲去都是那么几点,没有条理,没有重点,也没有心得,所以我决定自己来写一篇,当然,我是没有能力来改变

这一现象的,只是写来自己备忘罢了。

 

首先有几点要说明:
1.个人认为缓存只有两种:页输出缓存与应用程序数据缓存。一般大家也是这么认为的,但是有另外一部份人却把

这两个部份分了又分,搞出三五种出来。这就让人感觉很多余了。
2.所谓控件缓存,其实是用户控件缓存。可能是我理解有问题,我一开始还以为那种html控件,web控件也可以进行

缓存的。所以说定义名称要定义清楚。
3.实现缓存有两种方式:在aspx页面的顶部写页处理指令或者在cs代码里写代码(又叫缓存API),一种是静态设置

,一各是动态设置。网上总有些人喜欢说来说去又不总结清楚,搞的人很烦。
4.实际上只要用到了缓存就一定有缓存依赖。只是有些不那么明显。在我看的文章里一般都把缓存依赖单独作为一

章讲解,这是好事,因为在缓存的高级技术里缓存依赖是很重要的,但这并不代表有些缓存就没有缓存依赖。

 

 

好了,下面言归正传。我只讲常用的东东。

 

1.页面输出缓存。其实用户控件缓存跟它没有大的区别,只有一个location不能使用,在这里就一并讲了吧。
page指令:
<%@ OutputCache Duration="10" VaryByParam="*" VaryByControl="txtInput" %>
OutputCache是指令名。
Duration是缓存时长,单位是秒。
VaryByParam是跟据什么进行缓存。有两个特殊的值:none表示不随任何参数的不同而缓存,就是只缓存一个版本,*

表示随任何参数的不同而缓存,表示只要参数发生变化,就缓存一个新版本。
VaryByControl是跟据控件名进行缓存。这里的控件是指一般的服务器控件,不能是用户控件,不然会出现意想不到

的结果。

 

缓存API:
虽然页面输出缓存与用户控件缓存在页面指令方面差不多,但在api上面有所区别


页面缓存api:
映射的是System.Web.HttpCachePolicy类。
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(DateTime.Now.AddSeconds(3));

第一句对应的是Location,是说缓存在哪,public是哪里都缓存,nocache是都不缓存,private是客户端缓存,还有

其它几个选项。比较关注的是:客户端,代理服务器,服务器。
第二句对应的是Duration,是说缓存时长,这是个绝对时间,是说到了那个时就是取消缓存。
Response.Cache.VaryByParams["none"] = true;
对应的是VaryByParam
用中括号括起参数,中间可用分号分隔多个参数,true表示启用此参数。

没有对应VaryByControl的。

Response.Cache.SetSlidingExpiration(true);
当用了这一句的时候,所有缓存设置都不启作用了,原因是这个属性是用给代理服务器之类的处于浏览器和Web服务

器之间的缓存使用的,而不是给Web服务器本身的.是特意设计成这样的.

Response.Cache.SetNoServerCaching()
表示取消当前所有服务器缓存。

 

用户控件缓存api:


PartialCachingAttribute类,这是第一种方式
用户控件也可以通过标明类属性的方式完成缓存设置
在用户控件的后台代码类上面加上:
[PartialCaching(int duration)]
[PartialCaching(int duration, string varyByParams, string varyByControls, string varyByCustom)]
[PartialCaching(int duration, string varyByParams, string varyByControls, string varyByCustom, bool

shared)]
[PartialCaching(int duration, string varyByParams, string varyByControls, string varyByCustom, string

sqlDependency, bool shared)]
在这里的设置duration之类的与在page指令中投置duration之类的效果一样


ControlCachePolicy类,这是第二种方式
在使用这种方式之前,必须保证用户控件已使用page指令或PartialCachingAttribute类进行了封装,否则会报异常


这个类是在动态加载用户控件时使用的,没有使用缓存时的加载具体请参看我的另外一篇文章:如何以编程方式加载用户控件
PartialCachingControl my = (PartialCachingControl)LoadControl("usercon.ascx");
ControlCachePolicy cache = my.CachePolicy;
cache.Duration = TimeSpan.FromSeconds(3);
Controls.Add(my);
第一句是动态加载此用户控件,当用户控件启动缓存后,asp.net会将其嵌入在PartialCachingControl类中,所以必

须强转成PartialCachingControl。
第二句是获取PartialCachingControl的CachePolicy属性,是ControlCachePolicy类型,真正操作缓存的是这个类。
第三句是设置过期时间,没什么好说的
第四句是将动态生成的用户控件加入到主目录控件树中,没什么好说的。
我在这里只用了一个方法,其实它有很多方法,只要是在page指令里能设置的这里都可以进行设置。

 

在web.config中配置缓存

如果很多页面或用户控件使用相同的配置,则可以在web.config中进行配置后在page指令中统一调用。

在web.config中:

<caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="a" duration="3" varyByParam="none"/>
        </outputCacheProfiles>
      </outputCacheSettings>
</caching>

在page指令中:

<%@ OutputCache CacheProfile="a" %>

 

综上所述:
对于页面输出缓存,用page指令来完成静态设置,用System.Web.HttpCachePolicy类来完成动态设置
对于用户控件缓存,用page指令或PartialCachingAttribute类来完成静态设置,用ControlCachePolicy类来完成动

态设置。


以上所说的都是对整体的缓存,页面是一个整体,用户控件相对来说也是一个整体,下面要说的是另外一种思路,

2.0新增的:整体缓存,部分替换,也就是说,只对页面或者用户控件的一部份进行更新。

 

有两种方式:一种是使用控件,一种是控件api


使用substitution控件
从工具栏拖一个这样的控件就可以了。它只有一个methodname属性。该属性用于获取或者设置此控件相关联的回调函

数名称。此函数必须符合以下3个条件:
静态方法
参数类型为httpcontext
返回string类型的值

例如:在一个启用的输出缓存的页面上使用这个控件:
<asp:Substitution ID="subText" runat="server" MethodName="GetData" />
然后在后台写下这样的代码:
public static string GetData(HttpContext context)
{

            return DateTime.Now.ToString();
}
这样页面其它部分会进行缓存,但是这个地方会不停的打印新的时间。

注意:
substitution控件无法访问页面内的其它控件,只能使用传递给它的参数来访问当前页的上下文。
用户控件不能使用此控件
此控件不能包含或自己呈现任何标记,显示内容完全取决于方法的返回字符串。

 

使用控件api
主要就是Response.WriteSubstitution(getData)方法
它会将实时生成结果直接显示在页面最顶端,里面那个方法名就是与上面所写的方法一致就行了。而且用户控件可以

使用此方法。

使用WriteSubstitution()方法有两个好处。
第一,WriteSubstitution()方法引用的方法并不一定是当前类的方法。该方法可以是另一个实例或者另一个类的静

态方法。
第二个好处是,可以在自定义控件中使用WriteSubstitution()方法来实现缓存后替换。

 

2。应用程序缓存
此部分内容请参看我的另外一篇文章:asp.net 的状态管理与cache,在这篇文章里我将应用程序缓存与缓存依赖一并讲了。

 

参考文章
ASP.NET缓存:方法和最佳实践
http://blog.csdn.net/jelink/archive/2006/09/11/1210241.aspx
ASP.NET缓存的SetSlidingExpiration
http://space.cnblogs.com/question/879/
即使 SetSlidingExpiration 方法设置为,也会收到新网页而不是缓存的网页的满足运行.NET Framework 2.0 的计

算机上
http://support.microsoft.com/kb/909643/zh-cn
ASP.NET 2.0的页面缓存功能介绍
http://dev.yesky.com/msdn/498/2442998_1.shtml
4.3  使用部分页面缓存
http://book.csdn.net/bookfiles/1002/100100230727.shtml

分享到:
评论

相关推荐

    asp.net缓存技术

    ### ASP.NET 缓存技术详解 #### 一、概述 ASP.NET 缓存技术是用于提高网站性能的关键技术之一。通过缓存数据或页面,可以显著减少数据库访问次数,从而加快响应速度,提升用户体验。本篇文章将深入探讨 ASP.NET ...

    概述ASP.NET缓存机制

    总之,ASP.NET缓存机制通过高效地存储和检索常用数据,显著提升了Web应用的响应速度和服务器处理能力,是优化.NET Web应用不可或缺的工具。理解并熟练运用这两种缓存策略,可以有效地提升Web应用程序的用户体验和...

    ASP.NET缓存技术应用总结

    ASP.NET缓存技术是提升应用程序性能的关键手段,它通过存储常用数据或计算结果,避免了重复的数据库查询或计算,从而显著减少了响应时间。本文主要总结了ASP.NET中的各种缓存策略及其应用。 首先,我们要了解缓存的...

    ASP.NET缓存技术源码及PPT完整版

    ASP.NET缓存技术源码及PPT ASP.NET缓存技术源码及PPT

    asp.net缓存更新

    本文将深入探讨ASP.NET缓存管理及其更新策略。 首先,ASP.NET提供两种主要的缓存机制:Application Cache(应用程序缓存)和HttpRuntime.Cache(运行时缓存)。Application Cache主要用于存储全局性、在整个应用...

    ASP.NET_缓存技术

    ASP.NET缓存技术是.NET框架下用于提升Web应用程序性能的关键特性。它允许开发者将常用数据存储在内存中,避免每次请求时都从数据库或其他慢速资源中获取数据,从而显著提高响应速度。本文将深入探讨ASP.NET缓存的...

    ASP.NET缓存剖析

    总之,ASP.NET缓存是一个多维度的优化策略,它涵盖了从客户端到服务器端的各个层面。合理运用缓存技术,可以大幅提升用户体验,降低服务器负载,是构建高性能Web应用的基石。开发者应根据实际需求选择合适的缓存策略...

    ASP.net页面缓存技术

    ASP.net 页面缓存技术 输出缓存是 ASP.net 中的一种缓存技术,它允许开发者控制页面的缓存,以提高应用程序的性能。输出缓存可以将页面的输出缓存在客户端浏览器、代理服务器或 Web 服务器上,以便快速地将页面呈现...

    asp.net 缓存的各种方法

    ASP.NET 缓存机制是为了提高网站性能,减少服务器负载,通过存储经常访问的数据或计算结果,以便后续请求能快速响应。缓存分为多种类型,包括页面输出缓存、页面局部缓存、应用程序数据缓存、文件缓存依赖、数据库...

    asp.net缓存应用实例

    在标题提到的"asp.net缓存应用实例"中,我们可以看到一系列实用功能的实现,如天气预报、IP地址查询、手机号码归属地查询、邮编查询、身份证查询以及北京公交和全国火车时刻表查询。这些功能的实现都充分利用了ASP...

    ASP.NET缓存的实现

    作为.Net框架下开发Web应用程序的主打产品,ASP.NET充分考虑了缓存机制。通过某种方法,将系统需要的数据对象、Web页面存储在内存中,使得Web站点在需要获取这些数据时,不需要经过繁琐的数据库连接、查询和复杂的...

    asp.net缓存(页面输出缓存和应用程序缓存)

    ASP.NET缓存技术是提升Web应用性能的关键策略之一,它主要分为页面输出缓存和应用程序缓存两大类。这两种缓存机制旨在减少服务器处理请求的时间,降低数据库负载,并且提高用户体验,通过存储已经生成的HTML页面或...

    asp.net缓存 缓存

    ASP.NET缓存是微软开发的Web应用程序框架中的一个重要特性,用于提高网站性能和减少服务器负载。缓存技术在.NET框架中扮演着至关重要的角色,它能够存储数据以便快速访问,从而减少对数据库或其他慢速资源的依赖。在...

    【ASP.NET编程知识】ASP.NET缓存处理类实例.docx

    ASP.NET 缓存处理类实例 ASP.NET 缓存处理类实例是一个用于处理 ASP.NET 缓存的类,它提供了写入、读取和删除缓存对象的方法。该类使用 ASP.NET 缓存机制来存储和检索数据,可以在 ASP.NET 应用程序中使用,以提高...

    充分利用ASP.NET的三种缓存提高站点性能

    "充分利用ASP.NET的三种缓存提高站点性能" ASP.NET 提供了三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存 API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用...

    概述ASP.NET缓存机制示例

    ASP.NET缓存机制是.NET框架下用于提升Web应用程序性能的关键技术。它允许开发者将常用数据存储在内存中,避免每次请求时都从数据库或其他慢速资源中获取数据,从而显著提高响应速度。在这个示例中,我们将深入探讨...

Global site tag (gtag.js) - Google Analytics