用Cache做数据缓存

用Cache做数据缓存的例子:
数据缓存的方式有很多种,今天介绍下用Cache做数据缓存的方式吧.其中可以将数据读到xml中去.

低级API是Cache类,它位于ASP.NET中的System.web.Caching命名空间,可以用它缓存生成很耗费资源的数据。Cache类的使用和Session与Application对象一样简单。每个应用程序只有一个Cache对象——这意味着使用Cache对象存储在缓存中的数据是应用程序级别的数据。使事情更为简单的是,Page类的Cache属性使应用程序的Cache对象实例能在代码中使用。

通过Cache对象缓存的数据存储在应用程序的内存中。这意味着该数据的生存期不会超过应用程序的重启(事实上,这和存储在Application与Session对象中的数据一样,除非使用StateService或SQL State会话模式存储Session数据)。

具体的使用和语法与Session和Application一样。转换回来的时候需要注意对其进行相应类型的强制类型转换。

 

这不是在ASP.NET缓存中添加缓存项的惟一方式。Cache对象有两个方法Insert()方法和Add()方法,它们灵活性更高。它们的用法近似,但稍有不同:

Insert()方法用于覆盖ASP.NET缓存中现有的缓存项。

Add()方法只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项,则会失败)。


思路解析:
1.在页面初始化的时候,先从缓存中取缓存好了的数据.如果有的话,就直接绑定到DataGrid中去,如果没有的话,就从一个LoginMsg.xml中去读数据,并绑定;
2.触发"登录"事件,校验页面有效性.如果有效,先将以只读将原有的数据读到DataSet中去,然后在接受输入的数据,将其插入到其中去.

代码如下:
页面加载:
public void LoadData()
{
 DataView Source = (DataView)Cache["MyData"];
 if(Source == null)
 {
  DataSet ds = new DataSet();
  FileStream fs = new FileStream(Server.MapPath("LoginMsg.xml"), FileMode.Open,FileAccess.Read);
  StreamReader reader = new StreamReader(fs);
  ds.ReadXml(reader);
  fs.Close();
  Source = new DataView(ds.Tables[0]);
  Cache.Insert("MyData", Source, new CacheDependency(Server.MapPath("LoginMsg.xml")));  //CacheDependency方法是跟踪缓存的依赖性
//Insert()方法用于覆盖ASP.NET缓存中现有的缓存项。
  ErrorMsg.Text = "从文件中读取的数据";
 }
 else
 {
  //直接从缓存中提数据
  ErrorMsg.Text = "从缓存中读取的数据";
 }
 MyDataGrid.DataSource = Source;
 MyDataGrid.DataBind();
}

触发"登录"事件:
private void LoginMsg_Click(object sender, System.EventArgs e)
{
 if(!Page.IsValid)   //验证页面是否成功
 {
  ErrorMsg.Text = "必需输入登录信息";
  return;
 }
 DataSet ds = new DataSet();

 //从LoginMsg.xml中以只读的方式读出xml数据,并将原有的数据读到DataSet中去
 FileStream fs = new FileStream(Server.MapPath("LoginMsg.xml"),FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
 StreamReader reader = new StreamReader(fs);
 ds.ReadXml(reader);
 fs.Close();

 //接受输入的信息,并载入到DataTable中去
 DataTable dt = ds.Tables[0];
 DataRow newrow = dt.NewRow();
 newrow["custom_email"] = CustomEamil.Text;
 newrow["custom_pass"] = CustomPass.Text;
 newrow["login_time"] = DateTime.Now.ToString();

 //写入数据到LoginMsn.xml中去
 fs = new FileStream(Server.MapPath("LoginMsg.xml"), FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
 TextWriter writer = new StreamWriter(fs);
 writer = TextWriter.Synchronized(writer);
 ds.Tables[0].Rows.Add(newrow);
 ds.WriteXml(writer);
 writer.Close();
 Cache.Remove("MyData"); //清除缓存数据
 LoadData();  //重新载入缓存数据
}

1.GIF

转载于:https://www.cnblogs.com/ufo0303/archive/2006/09/19/508624.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值