- 浏览: 117164 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
jianxia801:
哥们你这个比较适用,但是无法下载!还有一个问题,你这个斜线回跟 ...
用js作表格的表头斜线 -
jianxia801:
哥们你的这个表格不错 不知道是否源码给我发送一份多谢先。你的无 ...
用js作表格的表头斜线 -
mistbow:
请问您知道有能编辑数学公式的文本编辑器吗?
几款在线文本编辑器的比较 -
sulangdong:
下载地址不可用,我QQ:592207250,邮箱:suxut ...
用JS+vml作三维报表 -
wushanlang:
很好!!先试试
JS的TreeGrid控件,累死我了!
最近因项目要求,需要研究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
发表评论
-
关于用户控件中文件链接的处理
2009-08-06 15:19 1219最近在开发网站, ... -
petshop4.0学习笔记之设计模式
2009-06-05 00:09 1244在petshop4.0中也用到了几个常用的设计模式:简单工厂模 ... -
petshop4.0学习笔记之多线程
2009-06-03 16:12 1063一直搞web开发,每天接触最多的就是asp.net+css+j ... -
petshop4.0学习笔记之消息队列(MSMQ)
2009-06-01 16:57 2490直到今天才知道,在我们每天都在用的Window系统 ... -
vs2005中母版页嵌套时无法切换到设计视图的解决办法
2009-05-20 13:50 1793假设有母版页第一级母 ... -
asp.net 编译模型学习笔记
2009-05-15 17:31 1657当一个web应用程序完成 ... -
asp.net 母版页学习笔记
2009-05-15 00:12 1128看来父亲对儿子永远是最了解的。看了Asp.net之父Scott ... -
asp.net ViewState学习笔记
2009-05-13 14:41 1085这些还是前辈们都研究 ... -
asp.net底层架构学习笔记(HttpRuntime,HttpApplication...)
2009-05-12 23:19 1520这些个东东我都是学习前辈,该说的前辈都已说过了,该做的前辈也已 ... -
asp.net中控件id,clientid,uniqueid的区别
2009-04-27 14:13 1512id是你在代码编写时给其赋的id属性,如果没有进行赋值 ... -
浅析asp.net的自定义控件
2009-04-26 15:46 876自定义控件分两种:简 ... -
httphandlers 与 httpmodules
2009-04-25 16:48 2082HttpHandlers 和 HttpMod ... -
如何以编程方式加载用户控件
2009-04-23 14:35 1021有用户控件文件:usercon.ascx,类名为:myCont ... -
web.config常用配置研究
2009-04-18 17:54 1287web.config 是asp.net的Web应用程序不可缺少 ... -
eval,bind,container.dateitem,数据绑定的研究
2009-04-17 14:49 1606首先,eval与bind是两个方法,都可以实现前台数据绑定Bi ... -
asp.net2.0 知识体系
2009-04-15 09:37 808入行计算机软件行业13个月了,搞.net开发也快1年了,跟据在 ... -
asp.net 的状态管理与cache
2009-04-14 15:10 1156在我的印象中,谈到状 ... -
asp.net的下载实现
2009-04-09 14:40 1032我现在接触到的下载有两种形式: 直接下载服务器某个目录下的文件 ...
相关推荐
### ASP.NET 缓存技术详解 #### 一、概述 ASP.NET 缓存技术是用于提高网站性能的关键技术之一。通过缓存数据或页面,可以显著减少数据库访问次数,从而加快响应速度,提升用户体验。本篇文章将深入探讨 ASP.NET ...
总之,ASP.NET缓存机制通过高效地存储和检索常用数据,显著提升了Web应用的响应速度和服务器处理能力,是优化.NET Web应用不可或缺的工具。理解并熟练运用这两种缓存策略,可以有效地提升Web应用程序的用户体验和...
ASP.NET缓存技术是提升应用程序性能的关键手段,它通过存储常用数据或计算结果,避免了重复的数据库查询或计算,从而显著减少了响应时间。本文主要总结了ASP.NET中的各种缓存策略及其应用。 首先,我们要了解缓存的...
ASP.NET缓存技术源码及PPT ASP.NET缓存技术源码及PPT
本文将深入探讨ASP.NET缓存管理及其更新策略。 首先,ASP.NET提供两种主要的缓存机制:Application Cache(应用程序缓存)和HttpRuntime.Cache(运行时缓存)。Application Cache主要用于存储全局性、在整个应用...
ASP.NET缓存技术是.NET框架下用于提升Web应用程序性能的关键特性。它允许开发者将常用数据存储在内存中,避免每次请求时都从数据库或其他慢速资源中获取数据,从而显著提高响应速度。本文将深入探讨ASP.NET缓存的...
本文主要讨论了ASP.NET中三种主要的缓存方式:页面级输出缓存、用户控件级输出缓存(片段缓存)以及缓存API。下面将详细阐述这些缓存方法及其最佳实践。 1. **页面级输出缓存** 页面级输出缓存是最简单的缓存形式,...
总之,ASP.NET缓存是一个多维度的优化策略,它涵盖了从客户端到服务器端的各个层面。合理运用缓存技术,可以大幅提升用户体验,降低服务器负载,是构建高性能Web应用的基石。开发者应根据实际需求选择合适的缓存策略...
ASP.net 页面缓存技术 输出缓存是 ASP.net 中的一种缓存技术,它允许开发者控制页面的缓存,以提高应用程序的性能。输出缓存可以将页面的输出缓存在客户端浏览器、代理服务器或 Web 服务器上,以便快速地将页面呈现...
ASP.NET 缓存机制是为了提高网站性能,减少服务器负载,通过存储经常访问的数据或计算结果,以便后续请求能快速响应。缓存分为多种类型,包括页面输出缓存、页面局部缓存、应用程序数据缓存、文件缓存依赖、数据库...
在标题提到的"asp.net缓存应用实例"中,我们可以看到一系列实用功能的实现,如天气预报、IP地址查询、手机号码归属地查询、邮编查询、身份证查询以及北京公交和全国火车时刻表查询。这些功能的实现都充分利用了ASP...
作为.Net框架下开发Web应用程序的主打产品,ASP.NET充分考虑了缓存机制。通过某种方法,将系统需要的数据对象、Web页面存储在内存中,使得Web站点在需要获取这些数据时,不需要经过繁琐的数据库连接、查询和复杂的...
ASP.NET缓存技术是提升Web应用性能的关键策略之一,它主要分为页面输出缓存和应用程序缓存两大类。这两种缓存机制旨在减少服务器处理请求的时间,降低数据库负载,并且提高用户体验,通过存储已经生成的HTML页面或...
ASP.NET缓存是微软开发的Web应用程序框架中的一个重要特性,用于提高网站性能和减少服务器负载。缓存技术在.NET框架中扮演着至关重要的角色,它能够存储数据以便快速访问,从而减少对数据库或其他慢速资源的依赖。在...
ASP.NET 缓存处理类实例 ASP.NET 缓存处理类实例是一个用于处理 ASP.NET 缓存的类,它提供了写入、读取和删除缓存对象的方法。该类使用 ASP.NET 缓存机制来存储和检索数据,可以在 ASP.NET 应用程序中使用,以提高...
"充分利用ASP.NET的三种缓存提高站点性能" ASP.NET 提供了三种主要形式的缓存:页面级输出缓存、用户控件级输出缓存(或称为片段缓存)和缓存 API。输出缓存和片段缓存的优点是非常易于实现,在大多数情况下,使用...