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

|