欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET 中的Application详解

程序员文章站 2023-12-18 19:33:46
一、全局应用程序类 从application这个单词上大致可以看出application状态是整个应用程序全局的。在asp时代我们通常会在application中存储一些...

一、全局应用程序类

从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 Application

上一篇:

下一篇: