求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
用Cache做数据缓存
 

2010-11-09 来源:cnblogs.com

 

用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();  //重新载入缓存数据
}



使用decj简化Web前端开发
Web开发框架形成之旅
更有效率的使用Visual Studio
MVP+WCF+三层结构搭建框架
ASP.NET运行机制浅析【图解】
编写更好的C#代码
10个Visual Studio开发调试技巧
更多...   


.NET框架与分布式应用架构设计
.NET & WPF & WCF应用开发
UML&.Net架构设计
COM组件开发
.Net应用开发
InstallShield


日照港 .NET Framework & WCF应用开发
神华信息 .NET单元测试
北京 .Net应用软件系统架构
台达电子 .NET程序设计与开发
赛门铁克 C#与.NET架构设计
广东核电 .Net应用系统架构
更多...