asp.net 用户控件在缓存期间 可以asp 改变 控件 颜色他的值吗

OutputCache缓存优化asp.net代码 提高网页性能
作者:admin&&&&时间: 21:47:21&&&&浏览:
对于asp.net编写的网页来说,使用缓存是一种非常重要也是很常用的优化技术,它可以大大减轻服务器的负载压力,优化这些网页的性能,在网与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能。同时,在网页加速显示上也起了很大的作用。OutputCache以声明的方式控制 ASP.NET 页或页中包含的用户控件的输出缓存策略。语法:&%@ OutputCache Duration=&#ofseconds&&& Location=&Any | Client | Downstream | Server | None |&ServerAndClient &&& Shared=&True | False&&& VaryByControl=&controlname&&& VaryByCustom=&browser | customstring&&& VaryByHeader=&headers&&& VaryByParam=&parametername& && VaryByContentEncoding=&encodings&&& CacheProfile=&cache profile name | ''&&& NoStore=&true | false&&& SqlDependency=&database/table name pair | CommandNotification&&& ProviderName=&Provider Name&& %&参数解释:
页或用户控件进行缓存的时间(以秒计)。 在页或用户控件上设置该特性为来自对象的 HTTP 响应建立了一个过期策略,并将自动缓存页或用户控件输出。
此特性必选。 如果未包含该属性,将出现分析器错误。
除非你的Location=None,可以不添加此属性,其余时候都是必须的。
OutputCacheLocation 枚举值之一。 默认值为 Any。
Location当被设置为None时,其余的任何设置将不起作用;
Any&&页面被缓存在浏览器、代理服务器端和web服务器端;
Client&&缓存在浏览器;
DownStream&&页面被缓存在浏览器和任何的代理服务器端;
None&&页面不缓存;
ServerAndClient&&页面被缓存在浏览器和web服务器端。
包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此特性。
&CacheProfile
与该页关联的缓存设置的名称。 这是可选特性,默认值为空字符串 (&&)。
&包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此特性。 在页中指定此属性时,属性值必须与 outputCacheSettings 节下面的 outputCacheProfiles 元素中的一个可用项的名称匹配。 如果此名称与配置文件项不匹配,将引发异常。
一个布尔值,它决定了是否阻止敏感信息的二级存储。
包含在用户控件(.ascx 文件)中的 @ OutputCache 指令不支持此特性。 将此特性设置为 true 等效于在请求期间执行以下代码:
Response.Cache.SetNoStore();
&ProviderName
一个字符串值,标识要使用的自定义输出缓存提供程序。
此属性仅在用户控件(.ascx 文件)中受到支持。 它不受包含在 ASP.NET 页(.aspx 文件)中的 @ OutputCache 指令的支持。
一个布尔值,确定用户控件输出是否可以由多个页共享。 默认值为 false。
包含在 ASP.NET 页(.aspx 文件)中的 @ OutputCache 指令不支持此特性。
&SqlDependency
标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。 请注意,SqlCacheDependency 类监视输出缓存所依赖的数据库中的表,因此当更新表中的项时,使用基于表的轮询时将从缓存中移除这些项。 如果以值 CommandNotification 使用通知(在 Microsoft SQL Server 2005 中),则最终会使用 SqlDependency 类向 SQL Server 2005 服务器注册查询通知。
SqlDependency 特性的 CommandNotification 值仅在网页 (.aspx) 中有效。 用户控件只能将基于表的轮询用于 @ OutputCache 指令。
&VaryByCustom
任何表示自定义输出缓存要求的文本。 如果特性的赋值为 browser,缓存将随浏览器名称和主要版本信息的不同而异。 如果输入自定义字符串,则必须在应用程序的 Global.asax 文件中重写 GetVaryByCustomString 方法。
&VaryByHeader
分号分隔的 HTTP 标头列表,用于使输出缓存发生变化。 将该特性设为多标头时,对于每个指定标头组合,输出缓存都包含一个不同版本的请求文档。
Accept-Language&&代表请求页面中用户最希望的有优先级顺序的人类语言列表;
User-Agent&&代表请求页面设备的类型;
Cookie&&代表当前域名下创建的浏览器的cookie项。
设置 VaryByHeader 特性将启用在所有 HTTP 1.1 版缓存中缓存项,而不仅仅在 ASP.NET 缓存中进行缓存。 用户控件中的 @ OutputCache 指令不支持此特性。
例如:设置VaryByHeader=&Accept-Language&。
当网站有多种语言版本时,可以为每种语言都进行缓存。
&VaryByParam
分号分隔的字符串列表,用于使输出缓存发生变化。 默认情况下,这些字符串对应于使用 GET 方法特性发送的查询字符串值,或者使用 POST 方法发送的参数。 将该特性设置为多个参数时,对于每个指定参数组合,输出缓存都包含一个不同版本的请求文档。 可能的值包括 none、星号 (*) 以及任何有效的查询字符串或 POST 参数名称。
在 ASP.NET 页和用户控件上使用 @ OutputCache 指令时,需要此特性或 VaryByControl 特性。 如果没有包含它,则发生分析器错误。 如果不希望通过指定参数来改变缓存内容,请将值设置为 none。 如果希望通过所有的参数值改变输出缓存,请将特性设置为星号 (*))。
如果命令设置为:
&%@ OutputCache Duration=&60&& VaryByParam=&ProductType& %&
当请求路径 /test.aspx?ProductType=1发生时,会建立缓存当ProductType的值变为2时,系统会建立新的缓存,但是原来的缓存在有效期内并不会失效。相当于为不同的ProductType值建立了不同版本的缓存。如果熟悉.Net数据缓存的话,很类似于下面的用法。
Cache.Add(&productType1&,cachedObject)
Cache.Add(&productType2&,cachedObject)
&VaryByControl
分号分隔的字符串列表,用于改变用户控件的输出缓存。 这些字符串代表用户控件中声明的 ASP.NET 服务器控件的 ID 属性值。
在 ASP.NET 页和用户控件上使用 @ OutputCache 指令时,需要此特性或 VaryByParam 特性。
例如下面:根据页面上下拉列表控件的选择的值不同进行不同的缓存输出
&%@ OutputCache Duration=&100& VaryByControl=&dropTest&%&
&VaryByContentEncodings
以分号分隔的字符串列表,用于更改输出缓存。 将 VaryByContentEncodings 特性用于 Accept-Encoding 标头,可确定不同内容编码获得缓存响应的方式。
OutputCache示例:下面的代码示例演示如何设置页或用户控件进行输出缓存的持续时间。&%@ OutputCache Duration=&100& VaryByParam=&none& %&下一个代码示例演示如何指示输出缓存按页或用户控件的位置对它们进行缓存,并根据窗体的 POST 方法或查询字符串对窗体参数进行计数。每个收到的具有不同位置或计数参数(或两者)的 HTTP 请求都进行 10 秒的缓存处理。带有相同参数值的任何后继请求都将从缓存中得到满足,直至超过输入的缓存期。&%@ OutputCache Duration=&10& VaryByParam=&count& %&应用实例:&▲图1 停止缓存的效果图&▲图2 执行缓存的效果图如图1所示,应用程序初始显示的是停止执行缓存的时间。当用户刷新页面时,时间值将随时变化,以便显示当前的最新时间。如图2所示,单击&缓存时间&超链接后,页面重定向到另一个页面。这时,页面显示的时间被缓存,数据过期时间为5秒。如果不断地刷新该页,那么每隔5秒钟时间值才变化一次。
本节示例存在两个关键点。一是在运行时实现停止缓存,二是配置@OutputCache指令。这两点都已经在应用程序Default.aspx文件中予以实现,下面列举了该文件源代码。Default.aspx文件源代码:&%@ Page Language=&C#& AutoEventWireup=&true& CodeFile=&Default.aspx.cs& Inherits=&Default& %&&%@ OutputCache Duration=&5& VaryByParam=&location& %& &!DOCTYPE html PUBLIC &-//W3C//DTD XHTML 1.1//EN& &http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&& &html xmlns=&http://www.w3.org/1999/xhtml&& &script language=&C# & runat=&server&& void Page_Load(object sender, EventArgs e) {&& //设置仅将缓存数据存储在服务器上&& &&& Response.Cache.SetCacheability(HttpCacheability.Server);&& &&& string temp_location = Request.QueryString[&location&];&& &&& //如果location为空,则不缓存,否则根据@ OutputCache指令声明执行缓存&& &&& if (temp_location == null)&& {&& &&&&&&& //停止当前响应的所有服务器缓存&& &&&&&&& Response.Cache.SetNoServerCaching();&& &&&&&&& Label1.Text = &停止缓存的时间:& + DateTime.Now.ToString();&& &&& }&& &&& else&&& {&& &&&&&&& Label1.Text = &设置了缓存的时间:& + DateTime.Now.ToString();&& &&& }&& }&& &/script&&& &head id=&Head1& runat=&server&&&& &title&示例12-1&/title&&& &link id=&InstanceStyle& href=&StyleSheet.css& type=&text/css& rel=&stylesheet& /&&& &/head&&& &body&&& &form id=&form1& runat=&server&&&& &div&&& &fieldset style=&width: 240px&&&& &legend class=&mainTitle&&设置页面输出缓存&/legend&&br /&&center&&asp:Label ID=&Label1& runat=&server& CssClass=&commonText&&&/asp:Label&&/center&&br /&&& &a href=&Default.aspx?location=beijing& class=&littleMainTitle& &缓存时间&/a&&br /&&/fieldset&&/div&&& &/form&&& &/body&&& &/html&&如上代码所示,代码头部的@OutputCache指令设置了Duration和VaryByParam属性,其指示数据过期时间为5秒。同时,缓存根据参数location发生变化。另外,代码还实现了Page_Load事件处理程序。在该程序中,首先,使用SetCacheability方法设置数据缓存必须存储在服务器上,然后,获取QueryString的location参数值,最后,根据location参数值进行判断。如果location参数值为空,则调用SetNoServerCaching方法停止当前响应的所有服务器缓存,并显示当前时间值。虽然@ OutputCache指令配置了页面输出缓存,但是,不会执行页面输出缓存功能。如果location参数值不为空,则直接显示当前时间值。在这种情况下,将执行@ OutputCache指令的配置内容。& %@ OutputCache NoStore=&True& Duration=&15& Location=&Any& VaryByControl=&OC& VaryByCustom=&browser& VaryByHeader=&headers& VaryByParam=&none& %&使用OutputCache注意事项在使用 ASP.NET 缓存时,应注意以下事项。首先,不要缓存太多项。缓存每个项都有内存开销。不要缓存容易重新计算和很少使用的项。其次,给缓存项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且会导致额外的代码清除和垃圾回收工作。使用与&ASP.NET Applications&性能对象关联的&Cache Total Turnover Rate&(缓存总流通率)性能计数器,您可以监视缓存中由于项到期而导致的周转。高周转率可能说明存在问题,特别是当项在到期前被移除时。(这种情况有时称作内存压力。)可以考虑把静态的、变化不大的或者不经常变化需要动态加载的内容放入控件中,使用缓存技术。
把文章分享到:
QQ交流群()ASP.Net缓存总结及分析 分享
字体:[ ] 类型:转载 时间:
提高性能最好最快的办法当然是通过缓存来改善,对于任何一个web开发者都应该善用缓存。Asp.net下的缓存机制十分强大,用好缓存机制可以让我们极大的改善web应用的性能,下面是一些总结的缓存的知识点,与大家分享交流:
1.页面缓存 
&&&&&& 要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。  
&&&&&&& &%@ OutputCache CacheProfile=" " NoStore="True | False" Duration="#ofseconds" Shared="True | False" Location="Any | Client | Downstream | Server | None | ServerandClient " SqlDependency="database/table name pair | CommandNotification " VaryByControl="controlname" VaryByCustom="browser | customstring" VaryByHeader="headers" VaryByParam="parametername" %&  
&&&&&&&&&&&& CacheProfile
&&&&&&&&&&&& 用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。在页面中指定此属性时,属性值必须与Web.config文件&outputCacheSettings&配置节下的outputCacheProfiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。
&&&&&&&&&&&& NoStore
&&&&&&&&&&&& 该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“Response.Cache.SetNoStore();”。
&&&&&&&&&&& Duration
&&&&&&&&&&&& 用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,Duration属性是必需的,否则将会引起分析器错误。
&&&&&&&&&&&& Shared
&&&&&&&&&&&& 该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在ASP.NET页中的@ OutputCache指令不支持此属性。
&&&&&&&&&&& Location
&&&&&&&&&&&& 用于指定输出缓存项的位置。其属性值是OutputCacheLocation枚举值,它们是Any、Client、Downstream、None、Server和ServerAndClient。默认值是Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。
&&&&&&&&&&&& SqlDependency
&&&&&&&&&&&& 该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:SqlCacheDependency类监视输出缓存所依赖的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在SQL Server 2005中)与CommandNotification值一起使用时,最终将使用SqlDependency类向SQL Server 2005服务器注册查询通知。另外,SqlDependency属性的CommandNotification值仅在ASP.NET页中有效。控件只能将基于表的轮询用于@ OutputCache指令。
&&&&&&&&&&&& VaryByControl
&&&&&&&&&&&& 该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的ASP.NET服务器控件的ID属性值。除非已经包含了VaryByParam属性,否则在@ OutputCache指令中,该属性是必需的。
&&&&&&&&&&&& VaryByCustom
&&&&&&&&&&&& 用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在应用程序的Global.asax文件中重写HttpApplication.GetVaryByCustomString方法。
&&&&&&&&&&& VaryByHeader
&&&&&&&&&&&& 该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本。VaryByHeader属性在所有HTTP 1.1缓存中启用缓存项,而不仅限于ASP.NET缓存。用户控件中的@ OutputCache指令不支持此属性。
&&&&&&&&&&&& VaryByParam
&&&&&&&&&&&& 该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的查询字符串或POST参数名称。值得注意的是,在输出缓存ASP.NET页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@ OutputCache指令中包含了VaryByControl属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化,则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。&&&&&& 创建页面输出缓存文件依赖
&&&&&& 示例代码:Response.AddFileDependency(MapPath("test.xml"));&&&&&& 如需要建立依赖多文件关系,则使用AddFileDependencies()方法。&&&&&& 使用编程方式设置页面缓存过期&&&&&& 示例代码:HttpResponse.RemoveOutputCacheItem(Page.ResolveUrl("~/test.aspx"));&&&&&& 此方法只接受一个"虚拟绝对"路径,因此需用Page.ResolveUrl()方法转换&&&&&& 使用编程方式设置多个页面缓存过期(创建键依赖(key dependency))&&&&&& 示例代码:&&&&&& 缓存页面:PageLoad:&&&&&&& Cache.Insert(“key”,DateTime.Now);&&&&&&& Response.AddCacheItemDependency("key");&&&&&& 通过此法向多个页面添加依赖项&&&&&& 移除依赖项:PageLoad:&&&&&& Cache.Remove("key");
&&&&&& 以编程方式操作页面输出缓存
&&&&&& 操作由Response.Cache属性暴露的HttpCachePolicy类对象的方法。
&&&&&& 创建页面输出缓存配置 代码如下:&&& &system.web&&&&&&&&&& &caching&&&&&&&&&&&&&&&& &outputCacheSettings&&&&&&&&&&&&&&&&&&&& &outputCacheProfiles&&&&&&&&&&&&&&&&&&&&&&&&&&&& &add name="CacheProfile1" duration="60" /&&&&&&&&&&&&&&&&&&&& &/outputCacheProfiles&&&&&&&&&&&&&&&& &/outputCacheSettings&&&&&&&&&& &/caching&&&&&&& &/system.web&2.部分页面缓存
&&&&&& 缓存后替换&&&&&& 采用声明方式,使用Substitution控件,设置MethodName属性所需的方法,此方法必须是静态方法,因为当前页输出缓存时,页面实例还没被创建。注:AdRotator内部使用了缓存后替代。&&&&&& 以编程方式设置缓存后替换,使用Response.WriteSubstitution()方法,好处:1,此方法引用的方法不一定是当前类的方法,可以是另一个类的实力或静态方法。2,可以在自定义控件中使用此方法实现缓存后替换。&&&&&& 部分页面缓存:用户控件缓存&&&&&& 给用户控件添加&%@ OutputCache%&指令。此指令包含一个Shared属性,可设置共享用户控件的输出缓存。
&&&&&& 以编程方式设置用户控件缓存
&&&&&& 当用户控件中包括&%@ OutputCache%&指令时,可以通过用户控件的CachePolicy属性所暴露的ControlCachePolicy类的实例的属性控制修改空间如何缓存。
&&&&&& 创建用户控件缓存的文件依赖
&&&&&& 可以使用CacheControlPolicy.Dependency属性在一个缓存了的用户控件和文件系统中一个文件间创建一个依赖,示例代码:&&&&&& PageLoad:&&&&&& CacheDependency depend=new CacheDependency(MapPath("~/test.xml"));&&&&&& this.CachePolicy.Dependency=&&&&&& 缓存动态载入的用户控件
&&&&&& 可以使用Page.LoadControl()方法载入用户控件,当具有缓存特性的用户控件被载入时,Asp.net Framework自动一个PartialCachingControl类的实例包装用户控件。示例代码:&&&&&& PageLoad:&&&&&& PartialCachingControl cacheme=(PartialCachingControl)Page.LoadControl("test.ascx");&&&&&& Cacheme.CachePolicy.SetExpires(DateTime.Now.AddSeconds(10));&&&&&& PlaceHolder1.Controls.Add(cacheme);&&&&&& Lable1.Text=cacheme.CachePolicy.Duration.ToString();
3.使用DataSource缓存
&&&&&& SqlDataSource、ObjectDataSource、XmlDataSource控件都包括了用于缓存DataSource承载的属性,好处是数据源控件可以在数据更新时自动重新载入数据。并且可以在多个页面间共享相同的数据,通过一些属性的组合来识别:SelectCommand、SelectParameters、ConnectionString。如果属性相同,即共享相同的缓存数据。
&&&&&& 通过设置属性设置缓存过期策略
&&&&&& 包括绝对缓存(EnableCaching="True" CacheDuration=“xxx”)和Sliding缓存(EnableCaching="True" CacheExpirationPolicy="Sliding" CacheDuration=“xxx”)&&&&&& 使用ObjectDataSource控件缓存&&&&&& 通过设置控件的EnableCaching、CacheExpirationPolicy、CacheDuration属性以及SelectMethod所制定的方法名来完成。
&&&&&& 使用XmlDataSource控件缓存
&&&&&& 设置DataFile属性创建一个文件依赖。
&&&&&& 创建数据源控件键值依赖&&&&&& 操作步骤&&&&&& 1、设置数据源控件的CacheKeyDependency属性(key);&&&&&& 2、在Global.asax创建初始化的(key)缓存项目。代码如下: 代码如下:&&&&&& Void Application_Start(Object Sender,EventArgs e)&&&&&&& {&&&&&&&&&&&& HttpContext context=HttpContext.C&&&&&&&&&&&& context.Cache.Insert(&&&&&&&&&&&& "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null&&&&&&&&&&& );&&&&&&& }&&&&&&& 3、在用于更改数据的页面上移除缓存项目(key);&&&&&& 如在DetailsView控件的ItemInserted事件中重新插入缓存项目,此时每个依赖于这个键值(key)的DataSource会自动重新载入数据,代码如下:&&&&&&
代码如下:&&&&&& protected void DetailsView_ItemInserted(object sender,DetailsViewInsertedEventArgs e)&&&&&& {&&&&&&&&&& Cache.Insert("key",Datetime.Now);&&&&&&& }&&&&&&& 注:以上key值采用当前时间并非必须。
4.Cache对象
&&&&&& 几乎可以给缓存添加任何对象,例如,可以添加自定义控件,DataSet,DataTable,ArrayList和List到缓存。注意:使用从缓存中返回的任何项目,应该总是要检查项目是否为空,如果一个项目已经被删除了,则当将来试图从缓存中读取时,就会返回null。&&&&&& 详细信息查看msdnCache 成员&&&&&& 添加数据缓存到Cache对象示例代码:&&&&&&
代码如下:&&&&&&& void Page_Load()&&&&&&& {&&&&&&&&&&&& DataTable dt=(DataTable)Cache["dtkey"];&&&&&&&&&&&&& if(dt==null)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&& dt=getdtFromDB();&& //此处调用方法从数据库中返回数据项DataTable&&&&&&&&&&&&&&&&&&&&& Cache.Insert("dtKey",dt,null,DateTime.Now.AddHours(1),Cache.NoSlidingExpiration);&& //此处使用绝对过期策略添加项目&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& GridView1.DataSource=&&&&&&&&&&&&&&& GridView1.DataBind();&&&&&&& }&&&&&&&& private DataTable getdtFromDB()&&&&&& {&&&&&&&&& //略......&&&&&&& }&&&&&& 使用依赖添加项目
&&&&&& Asp.net Framework包括三种缓存依赖&&&&&& 1、CacheDependency——用于创建一个文件依赖或缓存键值依赖。&&&&&& 2、SqlCacheDependency——用于创建一个对于Microsoft SQL Server数据库表或SQL Server 2005数据库查询的依赖。&&&&&& 3、AggregateCacheDependency——用于使用多个CacheDependency对象创建依赖,例如,可以用该对象组合文件和Sql依赖。
&&&&&& CacheDependency类是基类,其他两个类都是从该类继承。
&&&&&& 指定缓存项目优先级&&&&&& 可以指定CacheItemPriority枚举类型任意值。
&&&&&& 配置缓存&&&&&& 详细信息查看Msdn Caching元素
5.使用SQL缓存依赖
&&&&&& Asp.net Framework支持两种类型的SQL缓存依赖:拉和推。第一种模式使用表轮询的 ASP.NET 实现,第二种模式使用 SQL Server 2005 的查询通知功能。可以对任何最近版本的Ms SQL Server,包括Ms SQL server 2005 Express、Ms SQL Server 2000 和 Ms SQL Server 7.0,使用拉SQL缓存依赖。第二种类型推缓存依赖则只能用于Ms SQL Server 2005和Ms SQL server 2005 Express,因为他们依赖SQL Server的Service Broker。&&&&&& 使用拉SQL缓存依赖
&&&&&&& 实质上拉SQL缓存依赖使用数据库tigger,当表被修改时,tigger被触发,名为AspNet_SqlCacheTablesForChangeNotification的数据表的一行数据被更新,来记录修改情况,Asp.net Framework使用一个后台线程,来定期拉数据表的修改信息。如果有修改,则依赖于数据表的缓存项目被移除。&&&&&& 配置拉SQL缓存依赖:&&&&&& 1、必须对一个或多个数据库表启用SQL缓存依赖。&&&&&&&&&&&& 可以使用框架中的SqlCacheDependencyAdmin类来配置SQL数据库支持拉SQL缓存依赖,由于调用该类的方法需要创建表、存储过程、trigger,出于安全考虑,Asp.net进程并不应该被赋予这些权限,而是通过一个命令行工具来使用此类。&&&&&&&&&&&& aspnet_regsql 详细信息访问Msdn ASP.NET SQL Server 注册工具 (Aspnet_regsql.exe)
&&&&&&&&&&&& 简要步骤: 1、启用特定数据库的SQL缓存依赖。&&&&&&&&&&&& aspnet_regsql -c "Data Source=integrated Security=TInitial Catalog=Pubs" -ed&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 2、启用特定表的SQL缓存依赖。&&&&&&&&&&&& aspnet_regsql -c "Data Source=integrated Security=TInitial Catalog=Pubs" -ed -t Titles
&&&&&& 2、必须在Web配置文件中配置SQL缓存依赖。&&&&&&
代码如下:&&&&&&&&&&&& &!-- caching section group --&&&&&&&&&&&&&&&& &caching&&&&&&&&&&&&&&&& &sqlCacheDependency enabled = "true" pollTime = "1000" &&& //通过pollTime 的设置,定时拉数据库的修改&&&&&&&&&&&&&&&&&&& &databases&&&&&&&&&&&&&&&&&&&&&& &add name="Northwind"&&&&&&&&&&&&&&&&&&&&&&&& connectionStringName="NorthwindConnectionString1"&&&&&&&&&&&&&&&&&&&&&& pollTime = "1000"&&&&&&&&&&&&&&&&&&&&& /&&&&&&&&&&&&&&&&&&&& &/databases&&&&&&&&&&&&&&&& &/sqlCacheDependency&&&&&&&&&&&&&&&& &/caching&&&&&& a、 对页面输出缓存使用拉SQL缓存依赖:&%@ OutputCache%&指令指定sqlDependency属性值:库名和表名(Mydatabase:Mytable);&&&&&& b、对DataSource控件使用拉SQL缓存依赖:为DataSource控件sqlDependency属性指定值:库名和表名(Mydatabase:Mytable);
&&&&&& c、对Cache对象使用拉SQL缓存依赖:&&&&&
代码如下:&&&&&& void Page_Load()&&&&&&& {&&&&&&&&&&&& DataTable dt=(DataTable)Cache["dtkey"];&&&&&&&&&&&&& if(dt==null)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&& dt=getdtFromDB();&& //此处调用方法从数据库中返回数据项DataTable&&&&&&&&&&&&&&&&&&&&& SqlCacheDependency sqlDepend=new SqlCacheDependecy("Mydatabase","Mytable");&&&&&&&&&&&&&&&&&&&&& Cache.Insert("dtKey",dt,sqlDepend);&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& GridView1.DataSource=&&&&&&&&&&&&&&& GridView1.DataBind();&&&&&&& }&&&&&&&& private DataTable getdtFromDB()&&&&&& {&&&&&&&&& //略......&&&&&&& }&&&&& &&&&&& 使用推SQL缓存依赖
&&&&&& 通过Service Broker可以在数据库中的数据变更时自动给应用程序发送一个消息。&&&&&& 好处:Asp.net应用程序不必定时拉数据库的修改。&&&&&& 缺点:查询类型有诸多限制(如必须使用两部分的表明:abo.mytabel,查询必须包含一个显示的列名表明:不能使用*,不能引用视图、临时表等,不能包含子查询、外连接、子连接,不能引用大对象、不能使用DISTINCT、COMPUTE、COMPUTE BY、INSERT关键字、不能包含许多聚合函数 等等)
&&&&&& 1.为推SQL缓存依赖配置数据库&&&&&& 启用Ms SQL Server 2005 Service Broker:&&&&&& a、可以通过:Select name ,is_broker_enabled from sys_databases,查询是否对特定的数据库激活。&&&&&& b、通过:Alter Database MyBase Set ENABLE_BROKER,启用。&&&&&& c、为本地AspNet帐号赋予需要的权限,如:Grant Subscribe Query Notifications To “yourserver\Aspnet”&&&&& 也就是说sql缓存暂时只支持ms sql server 2005或以上,他们才有依赖通知。否则缓存无效。
&&&&&& 2.为推SQL缓存依赖配置应用程序&&&&&&
代码如下:&&&&&& void Application_Start(object sender, EventArgs e)&&&&&& {&&&&&&&&&&&& string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionS&&&&&&&&&&&& SqlDependency.Start(conString);&&&&&&&&&&&& HttpContext context=HttpContext.C&&&&&&&&&&&& context.Cache.Insert(&&&&&&&&&&&& "key",DateTime.Now,null,DateTime.MaxValue,Cache.NoSlidingExpiration,CacheItemPriority.NotRemovable,null&&&&&&&&&&& );&&&&&&& }&&&&& a、对页面输出缓存使用推SQL缓存依赖:&&&&&& 当缓存整个Asp.net页面时,可以使用推Sql缓存依赖。如果包含在页面上的任何Sql命令的结果有变动,页面就会自动从缓存中过期。&&&&&& SqlCommand对象包含一个NotificationAutoEnlist属性,该属性默认值为true。当NotificationAutoEnlist启用时,页面和命令间自动创建一个推缓存依赖。注意SqlDataSource的SelectCommand必须符合查询要求。&&&&& &&& b、对DataSource控件使用推SQL缓存依赖:&&&&&& 只需要设置SqlcacheDependency属性即可。设置SqlCacheDependency=“CommandNotification”&&& c、对Cache对象使用推SQL缓存依赖:&&&
代码如下:&&&&&& void Page_Load()&&&&&&& {&&&&&&&&&&&& DataTable dt=(DataTable)Cache["dtkey"];&&&&&&&&&&&&& if(dt==null)&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&& string conString=WebConfigurationManager.ConnectionStrings["MyContention1"].ConnectionS&&&&&&&&&&&&&&&&&&&&& SqlDatadapter dad=new SqlDataAdapter("Select a,b From dbo.Mytable",conString); //注意查询符合要求&&&&&&&&&&&&&&&&&&&&& SqlCacheDependency sqlDepend=new SqlCacheDependecy(dad.SelectCommand);&&&&&&&&&&&&&&&&&&&&& dt=new DataTable();&&&&&&&&&&&&&&&&&&&&& dad.Fill(dt);&&&&&&&&&&&&&&&&&&&&& Cache.Insert("dtKey",dt,sqlDepend);&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&& GridView1.DataSource=&&&&&&&&&&&&&&& GridView1.DataBind();&&&&&&& }&&&&&&& 注意,SqlCacheDependency类的示例被创建了。一个SqlCommand对象被传递给SqlCacheDependency类的构造函数。如果SqlCommand的结果变化了,则这个DataTable会自动从缓存中失效。这些命令的顺序很重要。必须在执行该命令之前创建SqlCacheDependency对象。如果在创建SqlCacheDependency对象之前调用Fill()方法,则依赖会被忽略。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 交通银行缓存清理控件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信