关闭

Asp.net的局部缓存

1065人阅读 评论(0) 收藏 举报
如果页面的部分内容动态改变,而部分内容则是保持不变,我们则可以考虑用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();
   }
  }

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:60702次
    • 积分:1291
    • 等级:
    • 排名:千里之外
    • 原创:66篇
    • 转载:7篇
    • 译文:0篇
    • 评论:12条
    优化蜘蛛引导