C#入门(十)—ASP.NET中的数据缓存

了解ASP.NET中缓存数据和传递数据的各种方法,通过比较,能在各种情况下选择合适的缓存和传递数据的方法。

一、页内数据保存

页面回发服务器后,页面对象已不是原来那个页面对象。其两种常用的方法:

1.ViewState

   ViewState用来保存用户的状态信息,有效期等于页面的生命周期;可以保存大量数据但是要慎用,因为会影响程序性能;所有的Web服务器控件都是用ViewState在页面PostBack期间保存状态;不需要则关闭 @page 里面设置EnableViewState=false。

代码如下:ViewState[“ID”]=“yzer”;
             String ID =ViewState[“ID”].ToString();

2.HiddenField

   HiddenField控件属于Html类型的服务器控件,始终处于隐藏状态;每一次提交的时候它会和其他服务器控件一起提交到服务器端。
代码如下:HiddenField1.Value=”yzer”;
             string id=HiddenField1.Value;

二、页间数据传递

1.使用QueryString变量 
   QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。
2.使用Application 对象变量
   Application用来保存所有用户共用的信息;在Asp时代,如果要保存的数据在应用程序生存期内不会或者很少发生改变,那么使用Application是理想的选择。但是在Asp.net开发环境中我们把类似的配置数据放在Web.config中;如果要使用Application 要注意的是所有的写操作都要在Application_OnStart事件中完成(global.Asax);Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock; 不要使用Application保存大数据量信息。
代码如下:Application[“UserID”]=”yzer”;
             String UserName=Application[“UserID”].ToString();

3.使用Session变量
   Session用来保存每一个用户的专有信息;Session的生存期是用户持续请求时间加上一段时间(一般是20分钟左右);Session信息是保存在Web服务器内存中的,保存数据量可大可小;Session超时或者被关闭将自动释放数据信息;过量的存储会导致服务器内存资源的耗尽。
代码如下:Session[“UserID”]=”yzer”;
             String UserName=Session[“UserID”].ToString();

4.使用Cookie对象变量
   Cookie用来保存客户浏览器请求服务器页面的请求信息;我们可以存放非敏感的用户信息,保存时间可以根据需要设置;如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止;Cookie对象的Expires属性设置为MinValue表示永不过期;Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据;由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端。

5.使用CrossPagePostBack方法
   用于跨页数据传送。

三、数据缓存

1. 页面输出缓存
    将已经生成的页面全部内容保存在服务器内存中。当再有请求时,系统将缓存中的相关数据直接输出,直到缓存数据过期。适用于不需要频繁更新数据,而占用大量时间和资源才能编译生成的页面。对于那些数据经常更新的页面,则不适用。设置页面输出缓存的两种方式:

   (1)使用@OutputCache指令
   (2)使用页面输出缓存API(HttpCachePolicy)
2. 页面部分缓存
    页面部分缓存是指输出缓存页面的某些部分,而不是缓存整个页面内容。实现页面部分缓存有两种机制:
   (1)控件缓存;
   (2)缓存后替换。
3. 应用程序数据缓存
    应用程序数据缓存的主要功能是在内存中存储各种与应用程序相关的对象。由System.Web.Caching.Cache类实现,具体如下:
  (1) 添加应用程序数据缓存对象:
          指定键名实现检索:   string txt=(string)Cache[“txtUserName”];
          使用Get方法实现检索:  String txt=(string)cache.get(“txtUserName”);
          使用GetEnumerator方法实现检索;
  (2)检索应用程序数据缓存对象:
         指定键名实现检索:   string txt=(string)Cache[“txtUserName”];
         使用Get方法实现检索:   String txt=(string)cache.get(“txtUserName”);
         使用GetEnumerator方法实现检索;
  (3)移除应用程序数据缓存对象:
         Cache.Remove(“txtUserName”);

4. 缓存依赖
    通过缓存依赖,可以在被依赖对象(如文件、目录、数据库表等)与缓存对象之间建立一个有效关联。当被依赖对象发生变化时,缓存对象将变得不可用,并被自动从缓存中移除。

posted @ 2010-12-03 15:37  勇泽  阅读(2594)  评论(0编辑  收藏  举报