ASP.NET 中的Application详解

所属分类: 网络编程 / ASP.NET 阅读数: 488
收藏 0 赞 0 分享

一、全局应用程序类

从Application这个单词上大致可以看出Application状态是整个应用程序全局的。在ASP时代我们通常会在Application中存储一些公共数据,而ASP.NET中Application的基本意义没有变:在服务器内存中存储数量较少又独立于用户请求的数据。由于它的访问速度非常快而且只要应用程序不停止,数据一直存在,我们通常在Application_Start的时候去初始化一些数据,在以后的访问中可以迅速访问和检索。

Global.asax 是一个用来处理应用程序全局的事件。打开文件,系统已经为我们定义了一些事件的处理方法。

复制代码 代码如下:

void Application_Start(object sender, 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中去初始化两个变量。

复制代码 代码如下:

void Application_Start(object sender, EventArgs e)
{
    // 在应用程序启动时运行的代码
    Application["PageClick"]=0;
    Application["UserVisit"]=0;
}

用户访问数根据Session来判断,因此可以在Session_Start的时候去增加这个变量:

复制代码 代码如下:

void Session_Start(object sender, EventArgs e)
{
    Application.Lock();
    Application["UserVisit"]=(int)Application["UserVisit"]+1;
    Application.UnLock();
}

我们看到,Application的使用方法和Session差不多。唯一要注意的是,Application的作用范围是整个应用程序,可能有很多用户在同一个时间访问Application造成并发混乱,因此在修改Application的时候需要先锁定Application,修改完成后再解锁。

页面单击数则在页面Page_Load的时候去修改。

复制代码 代码如下:

protected void Page_Load(object sender, 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的时候创建),应用程序结束的时候销毁。

·安全与性能。数据总是存储在服务端,安全性比较高,但不易存储过多数据。

·优缺点与注意事项。检索数据速度快,但缺乏自我管理机制,数据不会自动释放。

更多精彩内容其他人还在看

asp.net 页面间传值与跳转的区别

通过Server.Transfer("b.aspx") 与Response.Redirect("b.aspx")的区别
收藏 0 赞 0 分享

ASP.NET Gridview与checkbox全选、全不选实现代码

ASP.NET Gridview checkbox全选与全不选实现代码,其实原理就是利用js来实现的,但需要简单的设置下回传。
收藏 0 赞 0 分享

ASP.NET DropDownList控件的使用方法

ASP.NET DropDownList控件的使用方法,学习asp.net的朋友没用过这个控件的朋友可以参考下。
收藏 0 赞 0 分享

一些.NET对多线程异常处理技巧分享

多线程应用,在实际的项目或产品开发中,原则上来说,应该尽量避免,但是在强调用户体验的要求下或开发平台的限制下(如 Silverlight Socket 通讯),我们不得不用多线程。
收藏 0 赞 0 分享

ASP.NET MVC运行出现Uncaught TypeError: Cannot set property __MVC_FormValidation of null的解决方法

同一相站点,有些页面的客户端验证能工作,而有些死活不行。打开页面就出现Uncaught TypeError: Cannot set property __MVC_FormValidation of null错误
收藏 0 赞 0 分享

asp.net 通用分页显示辅助类(改进版)

在使用ASP.NET编程时,如果不用控件的默认分页功能,想自己搞一个,可以看看本文的asp.net通用分页显示辅助类哦。
收藏 0 赞 0 分享

微软 Visual Studio 2010官方下载地址给大家

昨天VS2010在网上报道都已经发布了,现在今天在网上找到Visual Studio 2010官方下载地址,提供给大家下载。
收藏 0 赞 0 分享

Javascript 直接调用服务器C#代码 ASP.NET Ajax实例

近来总有一些朋友会问到一些入门的问题,把这些问题整理一下,写出来。在以前的文章里,曾经利用纯JS编写过Ajax引擎,在真正开发的时候,大家都不喜欢以这种低效率的方式开发,利用MS Ajax的集成的引擎,可以简单不少工作。
收藏 0 赞 0 分享

ASP.NET 页面刷新的实现方法(包括html,js)

ASP.NET 页面刷新的实现方法,比较全了, 包括html与js下的实现方法。
收藏 0 赞 0 分享

asp.net 无刷新翻页就是这么简单

前两天看了一个自定义分页控件,和AspNetPager一样是实现IPostBackEventHandler接口,不过简洁许多,就想能不能实现ICallbackEventHandler接口做到无刷新分页呢?想到了就马上去做,终于,设想变成了现实!!
收藏 0 赞 0 分享
查看更多