ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?
为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示:
| 方法 |
信息量大小 |
保存时间 |
应用范围 |
保存位置 |
| Application |
任意大小 |
整个应用程序的生命期 |
所有用户 |
服务器端 |
| Session |
小量,简单的数据 |
用户活动时间+一段延迟时间(一般 为20分钟)
|
单个用户 |
服务器端 |
| Cookie |
小量,简单的数据 |
可以根据需要设定 |
单个用户 |
客户端 |
| Viewstate |
小量,简单的数据 |
一个Web页面的生命期 |
单个用户 |
客户端 |
| Cache |
任意大小 |
可以根据需要设定 |
所有用户 |
服务器端 |
| 隐藏域 |
小量,简单的数据 |
一个Web页面的生命期 |
单个用户 |
客户端 |
| 查询字符串 |
小量,简单的数据 |
直到下次页面跳转请求 |
单个用户 |
客户端 |
| Web.Config文件 |
不变或极少改变的小量数据 |
直到配置文件被更新 |
单个用户 |
服务器端 |
1.Application对象
Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在Application_OnStart事件(global.asax)中完成.尽管使用Application.Lock和Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈.因此最好不要用此对象保存大的数据集合. 下面我们做个在线用户统计的例子来说明这个问题:
(以文件的形式存放网站总访问量)
(1)Global.asax类
(2) WebForm1.aspx
private void Page_Load(object sender, System.EventArgs e)

{
this.Label1.Text = "正在访问站点的用户数:" + Application["CurrentGuests"].ToString();
this.Label2.Text ="访问过站点的总用户数:" + Application["AllGuests"].ToString();
}