application详解
一、全局应用程序类
从Application这个单词上大致可以看出Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据。由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。
Global.asax 是一个用来处理应用程序全局的事件。打开文件,系统已经为我们定义了一些事件的处理方法。
EventArgs e)
{
// 在应用程序启动时运行的代码
}
void
Application_End(object sender, EventArgs e)
{
//
在应用程序关闭时运行的代码
}
void Application_Error(object sender,
EventArgs e)
{
// 在出现未处理的错误时运行的代码
}
void
Session_Start(object sender, EventArgs e)
{
//
在新会话启动时运行的代码
}
void Session_End(object sender, EventArgs
e)
{
// 在会话结束时运行的代码
// 注意: 只有在 Web.config 文件中的
sessionstate 模式设置为InProc 时,才会引发 Session_End 事件
// 如果会话模式设置为
StateServer 或 SQLServer,则不会引发该事件
}
通过这些注释我们可以看到,这些事件是整个应用程序的事件,和某一个页面没有关系。
二、Application对象的应用
1.使用Application对象保存信息
(1)、使用Application对象保存信息
Application(“键名”) = 值
或 Application(“键名”,值)
(2)、获取Application对象信息
变量名 = Application(“键名”)
或:变量名 = Application.Item(“键名”)
或:变量名 =
Application.Get(“键名”)
(3)、更新Application对象的值
Application.Set(“键名”, 值)
(4)、删除一个键
Application.Remove(“键名”, 值)
(5)、删除所有键
Application.RemoveAll()
或Application.Clear()
2.有可能存在多个用户同时存取同一个Application对象的情况
这样就有可能出现多个用户修改同一个Application命名对象,造成数据不一致的问题。
HttpApplicationState类提供两种方法Lock和Unlock,以解决对Application对象的访问同步问题,一次只允许一个线程访问应用程序状态变量。
关于锁定与解锁
锁定:Application.Lock()
访问:Application(“键名”) =
值
解锁:Application.Unlock()
注意:Lock方法和UnLock方法应该成对使用。
可用于网站访问人数,聊天室等设备
3. 使用Application事件
在ASP.NET应用程序中可以包含一个特殊的可选文件—Global.asax文件,也称作ASP.NET应用程序文件,它包含用于响应ASP.NET或HTTP模块引发的应用程序级别事件的代码。
三、使用Application统计网站访问
假设我们希望使用Application统计网站的访问情况。
·页面单击数。页面被单击一次+1,不管是否是同一个用户多次单击页面。
·用户访问数。来了一个用户+1,一个用户打开多个页面不会影响这个数字。
我们首先需要在Application_Start中去初始化两个变量。
代码如下:
EventArgs e)
{
// 在应用程序启动时运行的代码
Application["PageClick"]=0;
Application["UserVisit"]=0;
}
用户访问数根据Session来判断,因此可以在Session_Start的时候去增加这个变量:
代码如下:
e)
{
Application.Lock();
Application["UserVisit"]=(int)Application["UserVisit"]+1;
Application.UnLock();
}
我们看到,Application的使用方法和Session差不多。唯一要注意的是,Application的作用范围是整个应用程序,可能有很多用户在同一个时间访问Application造成并发混乱,因此在修改Application的时候需要先锁定Application,修改完成后再解锁。
页面单击数则在页面Page_Load的时候去修改。
代码如下:
EventArgs e)
{
if (!IsPostBack)
{
Application.Lock();
Application["PageClick"] =
(int)Application["PageClick"] + 1;
Application.UnLock();
Response.Write(string.Format("页面单击数:{0}<br/>",
Application["PageClick"]));
Response.Write(string.Format("用户访问数:{0}<br/>",
Application["UserVisit"]));
}
}
四、Application总结
在ASP.NET
2.0中,Application已经变得不是非常重要了。因为Application的自我管理功能非常薄弱,它没有类似Session的超时机制。也就是说,Application中的数据只有通过手动删除或者修改才能释放内存,只要应用程序不停止,Application中的内容就不会消失。在下一节中,我们会看到,可以使用Cache实现类似Application的功能,同时Cache又有丰富而强大的自我管理机制。
让我们来总结一下Application的特性。
·存储的物理位置。服务器内存。
·存储的类型限制。任意类型。
·状态使用的范围。整个应用程序。
·存储的大小限制。任意大小。
·生命周期。应用程序开始的时候创建(准确来说是用户第一次请求某URL的时候创建),应用程序结束的时候销毁。
·安全与性能。数据总是存储在服务端,安全性比较高,但不易存储过多数据。
·优缺点与注意事项。检索数据速度快,但缺乏自我管理机制,数据不会自动释放。
application详解的更多相关文章
- Spring Boot 核心配置文件 bootstrap & application 详解。
用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .pr ...
- Chrome开发者工具详解(5)-Application、Security、Audits面板
Chrome开发者工具详解(5)-Application.Security.Audits面板 这篇文章是Chrome开发者工具详解这一系列的最后一篇,介绍DevTools最后的三个面板功能-Appli ...
- IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构(转载)
IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构 系列文章链接: IIS负载均衡-Application Request Route详解第一篇: ...
- IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)
IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...
- IIS负载均衡-Application Request Route详解第一篇: ARR介绍(转载)
IIS负载均衡-Application Request Route详解第一篇: ARR介绍 说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Applica ...
- [转]application.properties详解 --springBoot配置文件
本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...
- application.properties详解 --springBoot配置文件【转载】
# spring boot application.properties配置的各个属性详解 # 该示例文件作为标准提供.(官方文档 翻译过来的) # 还是花了些功夫翻译,各位如果转发,请留下本文地址, ...
- Android application 和 activity 标签详解
extends:http://blog.csdn.net/self_study/article/details/54020909 Application 标签 android:allowTaskRep ...
- delphi中Application.MessageBox函数用法详解
delphi中Application.MessageBox函数用法详解 Application.MessageBox是TApplication的成员函数,声明如下:functionTApplicati ...
随机推荐
- BZOJ 4769: 超级贞鱼 逆序对 + 归并排序
手画几下序列的变换后发现逆序对数是恒定的,故只需对第 $0$ 年求逆序对即可. 树状数组会 $TLE$ 的很惨,需要用到归并排序来求逆序对. 其实就是省掉了一个离散化的时间,估计能比树状数组快一半的时 ...
- windows与ubuntu双系统的安装
将ubuntu镜像烧录至U盘,从U盘启动电脑 选择自定义安装,不要选择它本身的双系统选项. 我的方案分区: 1. 挂载点/:主分区:安装系统和软件:大小为30G:分区格式为ext4:2. 挂载点/ho ...
- C++二维数组(指针)做参数
一.问题描述 使用C++编程过程中经常需要使用到二维数组,然而初级程序员在使用过程中经常会出错使程序崩溃.下面就二维指针的定义,初始化,以及二维指针做参数给出简单介绍. 1.二维数组的定义与初始化 在 ...
- HBase调优案例(一)——建表长时间等待最后失败
现象: 1.在HBase Shell里执行建表操作会等很久,最终失败: 2.通过代码侧进行建表同样不能成功. 原因排查: 1.查询HMaster日志,发现有接收到建表(create)的RPC请求: ...
- Java中创建String的两种方式
1.在Java中,创建一个字符串有两种方式 String x = "abc";String y = new String("abc"); 这两种方式有什么区别呢 ...
- leetcode-easy-array-283 move zeros
mycode 77.24% class Solution(object): def moveZeroes(self, nums): """ :type nums: Li ...
- leetcode-mid-others-169. Majority Element¶
mycode 54.93% class Solution(object): def majorityElement(self, nums): """ :type num ...
- Linux_RHEV虚拟化_基础理论&KVM
目录 目录 RHEV KVM Full 完全虚拟化 PV半虚拟化 Full和PV最大的区别 HVMHardware Virtual Manager硬件辅助虚拟化 Setup KVM Use the v ...
- Jmeter接口测试系列之测试用例变量参数化处理
在进行接口测试时,一组完整的接口测试用例,存在后一个测试用例使用前一个用例的请求结果中的数据,此时就需要参数化测试用例中值.直接使用变量调用会存在问题,此时就需要用到beanshell去改变. 举例说 ...
- IntlliJ IDEA 注册码获取或离线破解
JB 的软件还是挺好用的,建议有钱的话支持正版.. IntelliJ IDEA 有开源版,但是要想玩企业级开发,还是得用收费版. 不管哪种方式,使用前都需要把"0.0.0.0 account ...