Application简述(不如Cache)

在asp.net环境下,Application对象来自HttpApplictionStat类。它可以在多个请求、连接之间共享公用信息,也可以在各个请求连接之间充当信息传递的管道。使用Application对象来保存我们希望传递的变量。由于在整个应用程序生存周期中,Application对象都是有效的,所以在不同的页面中都可以对它进行存取,就像使用全局变量一样方便。如果用到多个用户之间的通信的时候,多用在网站计算器等,存活于整个应用程序运行周期static作用于应用程序整个运行周期。



asp.net为我们提供了另外一种全局变量保存方法,Application对象,它也是面向所有用户,它的生命周期也依赖于应用程序,当应用程序初始化后它就开始重建。但它最大的缺点是:application不可以指定过期时间,只能通过人工使用Remove或RemoveAll或RemoveAt方法或者关闭应用程序 移除,达到过期目的,这样不太智能,,此时就要用到cache管理。

Application使用(与session用法大致相同)

Application的创建:


Application["application名称"] = "application的值";

Application读取


string str = Application["application名称"];

常用的属性和方法


All--------------------返回全部的Application对象变量到一个对象数组
AllKeys--------------返回全部的Application对象变量到一个字符串数组
Count----------------取得Application中对象变量的数量
ItemApplication----变量名称传回的内容值
Add------------------新增一个Application变量值
Clear----------------清空全部Application变量值
Get-------------------变量名传回的变量值
Set--------------------更新Application变量值
Lock------------------锁定所有Application变量值
UnLock--------------解除锁定Application变量

Application对象特性:


存储的物理位置:服务器内存。 存储的类型限制:任意类型。 状态使用的范围:整个应用程序。 存储的大小限制:任意大小。 生命周期:应用程序开始的时候创建(准确来说是用户第一次请求某URL的时候创建),应用程序结束的时候销毁。 安全与性能:数据总是存储在服务端,安全性比较高,但不易存储过多数据。 优缺点与注意事项:检索数据速度快,但缺乏自我管理机制,数据不会自动释放。

应用程序生命周期事件和 Global.asax 文件

在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法。若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为Global.asax 的文件。
如果创建了Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序。
HttpApplication 进程的一个实例每次只处理一个请求。由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化应用程序的事件处理过程。这样还可以将特定于请求的数据存储在应用程序类的非静态成员中。例如,可以在Global.asax 文件中定义一个属性,然后为该属性赋一个特定于请求的值。
通过使用命名约定 Application_event(如 Application_BeginRequest),ASP.NET 可在Global.asax 文件中将应用程序事件自动绑定到处理程序。这与将 ASP.NET 页方法自动绑定到事件(如页的 Page_Load 事件)的方法类似。Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在应用程序域的生命周期期间,ASP.NET仅调用这些方法一次,而不是对每个HttpApplication 实例都调用一次。
下表列出在应用程序生命周期期间使用的一些事件和方法。实际远不止列出的这些事件,但这些事件是最常用的。

利用global.asax文件加Application对象实现简单的网站计数:

global.asax文件(练习):

using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing; namespace JJQ2
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// 在应用程序启动时运行的代码
Application["count"] = 0;//初始设置计数从0开始
Debug.WriteLine("Application_Start()");
AreaRegistration.RegisterAllAreas();
//FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
void Application_Error()
{
// 在出现未处理的错误时运行的代码
}
protected void Application_end()
{
Debug.WriteLine("Application_end()");
// 在应用程序关闭时运行的代码
} void Session_start()
{
Debug.WriteLine("Session_start()");
// 在新会话启动时运行的代码
Application.Lock();//同步,避免同时写入
Application["count"] = (int)Application["count"] + 1;//没建立一个会话该全局变量加1
Application.UnLock();//同步结束
} void Session_end()
{
Debug.WriteLine("Session_end()");
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。
// 如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
}
}
}

使用网站计数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("欢迎光临!");
Response.Write("您是第");
Response.Write((int)Application["count"]);
Response.Write("个访问此网站的人!");
}
}

Ps::

  1. application是在asp阶段使用的,后来升级到.net后,使用的是cache,但为了向前兼容,依然保留了application。

    2.

    cache比application使用更加灵活,功能更强大。

    cache可以设置每一个item的优先级,当服务器内存不够时,将对cache进行压缩,将一些很长时间没使用的或者优先级低的item从cache中移去。

    3.cache中可设置某个item的依赖性,依赖的对象可以是 cache中的其他item或者是某个文件。当依赖的item或者文件发生改变时,此item的内容会自动更新或者移除。

    4.效率上,cache 要比application高,部分原因是因为appliction并发访问时需要调用lock和unlock,这将所有的application变量全锁定,而cache内部实现了并发访问时的互锁,每次可以只对某一个item加锁,而不是对整个cache加锁。

MVC-Application的更多相关文章

  1. [转]剖析ASP.Net MVC Application

    http://www.cnblogs.com/errorif/archive/2009/02/13/1389927.html 为了完全了解Asp.net MVC是怎样工作的,我将从零开始创建一个MVC ...

  2. 源码学习之ASP.NET MVC Application Using Entity Framework

    源码学习的重要性,再一次让人信服. ASP.NET MVC Application Using Entity Framework Code First 做MVC已经有段时间了,但看了一些CodePle ...

  3. Implementing HTTPS Everywhere in ASP.Net MVC application.

    Implementing HTTPS Everywhere in ASP.Net MVC application. HTTPS everywhere is a common theme of the ...

  4. [转]Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10)

    本文转自:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/creating-a ...

  5. [转]Sorting, Filtering, and Paging with the Entity Framework in an ASP.NET MVC Application (3 of 10)

    本文转自:http://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/sorting-fi ...

  6. Migrating an ASP.NET MVC application to ADFS authentication

    I recently built an ASP.NET application at work to help track internal use of our products. It's bee ...

  7. Pro Aspnet MVC 4读书笔记(1) - Your First MVC Application

    Listing 2-1. The default contents of the HomeController class using System; using System.Collections ...

  8. [转] Spring MVC sample application for downloading files

    http://www.codejava.net/frameworks/spring/spring-mvc-sample-application-for-downloading-files n this ...

  9. 6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

  10. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

随机推荐

  1. 【swoole】PHP+Swoole+Linux实现进程监控

    脚本代码 class Server { const PORT = 8888; public function port() { //netstat -anp 2>/dev/null| grep ...

  2. Qt编写气体安全管理系统4-通信协议

    一.前言 通信协议解析是整个系统的核心灵魂,绝大部分人做软硬件通信开发,第一步估计就是写demo将协议解析好,然后再慢慢写整个界面和操作流程等,在工业控制领域,modbus协议应用还是非常广泛的,这个 ...

  3. 搭建Keepalived+LVS-DR集群

    (1).Keepalived概述 keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层.第 4 层和第 5层交换. Keepalived ...

  4. Spring MVC 数据转换和格式化

    HttpMessageConverter和JSON消息转换器 HttpMessageConverter是定义从HTTP接受请求信息和应答给用户的 HttpMessageConverter是一个比较广的 ...

  5. 【Leetcode_easy】888. Fair Candy Swap

    problem 888. Fair Candy Swap solution: class Solution { public: vector<int> fairCandySwap(vect ...

  6. c# stmp邮件发送

    最近用到了邮件发送功能,因为stmp设置.参数传递错误等一些问题走了弯路,虽然代码很简单,这里还是记录一下,方便下次查阅. 用个人163邮箱测试的邮件发送 class Program { static ...

  7. Python unittest框架实现appium登录

    import unittest from appium.webdriver import webdriver from ddt import data,ddt,unpack class MyTestC ...

  8. union all 关键字的应用(合并两个查询结果集到同一个结果集)

    在此对于数据库中 union all 关键字的功能和用法进行简单的使用介绍. 这是我工作中的一个需求: 有两个 A表 和B表. A表的数据: B表的数据: 现在有这样一个需求,让他一次性的全部查出来. ...

  9. __init__调用之二

    class Bar: def __init__(self,name,age): self.suibian = name #self后的名字是啥,对象就可以调用啥,而不是 __init__ 后括号形参 ...

  10. 过滤器( filter )的使用

    转自:https://www.jianshu.com/p/2ea2b0e4d1f2 过滤器通常 在 web 服务端用的比较多,有要功能 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发 ...