谁有耐心给小弟讲讲ASP.NET的Cache
在网上搜索很多,书上也有介绍,不过基本没看明白。
书上的代码打出来都不能运行 @_@,希望这里有大哥能详细的讲下。
我有几处问题。 就拿我目前做的一个小系统的 SiteConfig表的作为例子。
SiteConfig --网站参数表
SiteName,SiteTitle,SiteLogo,SiteUrl......等
这个表基本上每页都要用到,所以要把里面的数据缓存起来。
1、我该用什么方法缓存这个表的数据
[我] HttpContext.Current.Cache.Insert( "SiteConfig ", (DataTable)sitecfg.getConfig(fields));
这样我在Codebehind里调用里面的数据化就要实例化一个DataTable mydt, 比如网站标题就是 mydt.Rows[0].[ "SiteName "].ToString();
这样的话 难道我在网站页脚(foot.ascx)里也要先 弄一个DataTable吗?
1、我在foot.ascx里如何得到 Copyright 这个字段的内容,这个内容就在Cache里
2、创建一个DataTable 再取Cache[ "SiteConfig "]的值 是不是又占用了内存?
3、为什么是HttpContext.Current.Cache[key],我看书上的直接是Cache[key]。
4、比如我的 <meta name= "keywords " content= " " /> 我如何把缓存里Keywords放进去
------解决方案--------------------3应该是在页面后台类中,直接引用的Page类的Cache,所以不用命名空间
------解决方案--------------------4应该可以直接通过 <%= %> 输出吧
------解决方案--------------------1、缓存中有页面,象版权这种不经常变化的可以使用页面缓存
2、缓存肯定要占用服务器的内存的
------解决方案--------------------如果不在页面文件,只能用HttpContext.Current.Cache[key]来得到Cache
大多使用DataTable,使用格式大致如下
//在类一级声明DataTable
private System.Data.DataTable myDataTable;
protected System.Web.UI.WebControls.DataGrid productGrid;
//创建DataTable的方法
private void MakeData()
{
//从Cache中查找myDataTable对象
myDataTable = (DataTable)Cache.Get( "myDataTable ");
//如果Cache中不存在myDataTable对象,则创建
if(myDataTable == null)
{
//生成你的DataTable
...
//把myDataTable存入应用程序缓存
Cache.Insert( "myDataTable ", myDataTable);
}
}
private void BindData()
{
MakeData();
productGrid.DataSource = myDataTable;
productGrid.DataBind();
}
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
//如果是第一次请求页面,则清除myDataTable对象确保不存在myDataTable的缓存版本
Cache.Remove( "myDataTable ");
}
MakeData();
if(!Page.IsPostBack)
{
BindData();
}
}