日期:2014-05-18  浏览次数:20409 次

谁有耐心给小弟讲讲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();
}
}