在页面上进行缓存后又要保证局部的数据不缓存,如何实现

在页面上进行缓存后又要保证局部的数据不缓存,如何实现ASP.NET课程问题... 在页面上进行缓存后又要保证局部的数据不缓存,如何实现
ASP.NET 课程问题
展开
 我来答
无限UP
推荐于2016-02-21 · TA获得超过129个赞
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:94.4万
展开全部
页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容。实现页面部分缓存有两种机制:一种是将页面中需要缓存的部分置于用户控件(.ascx文件)中,并且为用户控件设置缓存功能(包含用户控件的ASP.NET页面可设置也可不设置缓存)。这就是通常所说的友芹虚“控件缓存”。设置控件缓存的实质是对用户控件进行缓存配置。主要包括以下3种方法:一是使用@ OutputCache指令以声明方式为用户控件设置缓存功能,二是在代码隐藏文件中使用PartialCachingAttribute类设置用户控件缓存;三是使用ControlCachePolicy类以编程方式指定用户控件缓存设置。另外,还有一种称为“缓存后替换”的方法。该方法与控件缓存正好相反,将页面中的某一部分设置为不缓存,因此,尽管缓存了整个页面,但是当再次请求该页时,将重新处理那些没有设置为缓存的内容。

使用@ OutputCache指令

控件缓存与页面输出缓存的@ OutputCache指令既有相似之处,又有不同的方面。二者的共同点在于它们的设置方法基本相同,都是文件顶部设置包含属性的@ OutputCache指令字符串。不同点包括以下两个方面:一是控件缓存的@ OutputCache指令设置在用户控件文件中,而页面输出缓存的@ OutputCache设置在普通ASP.NET文件中。二是控件缓存的@ OutputCache指令只能设置6个属性,Duration、Shared、SqlDependency、VaryByControl、VaryByCustom和VaryByParam。而在页面输出缓存的@ OutputCache指令字符串中设置的属性多达10个。以上是设置控件缓存时需要注意的问题。下面列举了一些利用@ OutputCache指令设置控件缓存的示例,其中重点说明了好燃VaryByParam和VaryByControl等属性应用。

用户控件中的@ OutputCache指令设置源代码

<%@ OutputCache Duration="120" VaryByParam="CategoryID;SelectedID"%>

以上代码设置用户控件缓存有效期时间是120秒,并且允许使用CategoryID和SelectedID参数来改变缓存。通过VaryByParam属性设置,在服务器缓存中可能存储多个用户控件的实例。例如,对于一个包含用户控件的页面,可能存在如下的URL链接。

包含用户控件的页面的URL链接

http://localhost/mypage.aspx?categoryid=foo&selectedid=0
http://localhost/mypage.aspx?categoryid=foo&selectedid=1

当请求如上URL地址的页面时,由于控件中@ OutputCache指令的设置,尤其是属性VaryByParam的设置,那么在服务器缓存中就会存储两个版本的用户控件缓存实例。

控件缓存设置除了支持以上所述VaryByParam属性外,还支持VaryByControl属性。VaryByParam属性基于使用POST或者GET方式发送的名称/值对来改变缓存,而VaryByControl属性通过用户控件文件中包含的服务器控件来改变缓存。下面是VaryByControl属性的应用示例代码。

用户控件中的@ OutputCache指令设置源代码

<%@ OutputCache Duration="120" VaryByParam="none" VaryByControl="Category" %>

以上代码设置缓存有效期是120秒,并且页面不随任何GET或POST参数改变(即使不使用VaryByParam属性,但是仍然需要在@ OutputControl指令中显式声明该属性)。如果用户控件中包含ID属性为“Category”的服务器控件(例如下拉框控件),那么缓存将根据该控件的变化来存储用户控件数首陵据。

如果读者已经掌握了页面输出缓存的@ OutputCache指令设置方法,那么控件缓存的@ OutputCache指令也会迎刃而解,无非仅使用其中的6个属性而已。然而,可能会产生疑问:如果ASP.NET页面和其中包含的用户控件都通过@ OutputCache指令设置了缓存,那么缓存该如何运行呢?

遇到这个问题时,应掌握以下个基本原则:一是ASP.NET允许在页面和页面的用户控件中同时使用@ OutputCache指令设置缓存,并且允许设置不同的缓存过期时间值。二是如果页面输出缓存过期时间长于用户控件输出缓存过期时间,则页面的输出缓存持续时间优先。例如,如果页面输出缓存设置为100秒,而用户控件的输出缓存设置为50秒,则包括用户控件在内的整个页将在输出缓存中存储100秒,而与用户控件较短的时间设置无关。三是如果页面输出缓存过期时间比用户控件的输出缓存过期时间短,则即使已为某个请求重新生成该页面的其余部分,也将一直缓存用户控件直到其过期时间到期为止。例如,如果页面输出缓存设置为50秒,而用户控件输出缓存设置为100秒,则页面其余部分每到期两次,用户控件才到期一次。
186044
2010-04-29 · TA获得超过1966个赞
知道大有可为答主
回答量:848
采纳率:0%
帮助的人:1314万
展开全部
如果页面的部分内容动态改变,而部分内容则是保持不变,我们则可以考虑用asp.net的局部缓存技术
有两种方案可以解决,一种是控件缓存,即把不变的内容做成用户控件,然后让此控件缓存,而整个页面不会缓存。另一种是缓存后替换,即整个页面缓存,而用Substitution控件来处理动态判丛宴内容。
一:控件缓存
在控件的ascx页面山写<%@ OutputCache Duration="120" VaryByParam="None" %>本控件缓存120秒
或者在服务端
[PartialCaching(120)]
public partial class CachedControl : System.Web.UI.UserControl
{
// Class Code
}
注意两点:
1. 控件有缓存,所在页面也有缓存,如果控件缓存时间小于页面缓存时间,则页面缓存时间为主。
2. 如果控件缓存时间掘银大于页面缓存时间,则页面缓存失效后控件仍然缓存。
二:缓存后替换
使用Substitution控件来实现,使用 MethodName 属性指定要在 Substitution 控件执行时调用的回调方法的名称
<asp:substitution id="Substitution1"
methodname="GetCurrentDateTime"
runat="Server">
</asp:substitution>
服务端方法:
public static string GetCurrentDateTime (HttpContext context)
{
return DateTime.Now.ToString ();
}
实例:
DataView dv=(DataView)Cache["dv"];
if(dv==null)
{
System.Data.SqlClient.SqlConnection sqlconn=new System.Data.SqlClient.SqlConnection("数据连接字符串");
System.Data.SqlClient.SqlDataAdapter cmd=new System.Data.SqlClient.SqlDataAdapter("select * from test",sqlconn);
DataSet ds=new DataSet();
cmd.Fill(ds,"test");
DG_main.DataSource=ds.Tables["test"].DefaultView;
Cache["dv"]=ds.Tables["test"].DefaultView;//设置缓存
}
else
{
DG_main.DataSource=Cache["dv"];//用缓存绑定
DG_main.DataBind();
}
Asp.Net缓存郑乱Cache使用一例
本例完成建立缓存,清除缓存使用缓存进行数据绑定

public DataSet createCache(){
//返回DataSet
DataSet ds=new DataSet();
OleDbConnection conn=new OleDbConnection

("provider=microsoft.jet.oledb.4.0;data source="+Server.MapPath("data.mdb"));
conn.Open();
string sql="select * from data1 order by createtime asc";
OleDbDataAdapter cmd=new OleDbDataAdapter(sql,conn);
cmd.Fill(ds);
cmd.Dispose();
conn.Dispose();
return ds;
}

private void Button1_Click(object sender, System.EventArgs e)
{//清除Cache
Cache.Remove("DataList");
Response.Write("缓存清除成功");
}

private void Button2_Click(object sender, System.EventArgs e)
{//建立Cache
if(Cache["DataList"]==null)
{
//缓存不存在建立缓存
Cache.Insert("DataList",(DataSet)createCache());
DataSet ds=(DataSet)Cache["DataList"];
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
}
else
{
//缓存存在执行绑定
DataSet ds=(DataSet)Cache["DataList"];
DataGrid1.DataSource=ds;
DataGrid1.DataBind();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刘先凌
2010-04-29 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1277
采纳率:100%
帮助的人:0
展开全部
在C:\Auotoexec.bat中加入
“C:\Windows\Smartdrv.exe
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式