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. LeetCode_263. Ugly Number

    263. Ugly Number Easy Write a program to check whether a given number is an ugly number. Ugly number ...

  2. [lodop]css样式after、before添加content内容之前和之后

    css样式可以在内容之前和之后加内容.格式是:css类名:before{content:在之前加的内容}css类名:after{content:在之后加的内容}这种写法在LODOP里直接测试是不行的, ...

  3. 最新 安易迅java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿. 安易迅等10家互联网公司的校招Offer,因为某些自身原因最终选择了 安易迅.6.7月主要是做系统复习.项目复盘.Leet ...

  4. 开启Hadoop和Spark的学习之路

    Hadoop Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力进行高速运算和存储. Hadoop实现了一个 ...

  5. ubuntu安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1

    最近学习大数据,涉及到hive的部分需要安装mysql,于是就在linux环境下尝试安装,对于我这个linux小白来说,中间遇到很多坑爹问题,在这里做一个记录. 我参考的mysql安装博客: http ...

  6. python基础篇(三)

    PYTHON基础篇(三) 装饰器 A:初识装饰器 B:装饰器的原则 C:装饰器语法糖 D:装饰带参数函数的装饰器 E:装饰器的固定模式 装饰器的进阶 A:装饰器的wraps方法 B:带参数的装饰器 C ...

  7. .NET开发的一些积累

    ASP.NET项目开发一些琐碎的积累 1.过滤危险的字符串,诸如“=”.“>”等可能会诸如数据库的危险字符串,我看过很多人做的网页仅仅进行客户端脚本验证是不够的.必须在服务器段的后台代码里面也进 ...

  8. gitlab 重置密码

    sudo gitlab-rails console production --------------------------------------------------------------- ...

  9. RHEL 6.5 安装Docker

    一,配置远程yum源二,下载依赖包1.安装downloadonly插件使用yum下载rpm包2.下载docker需要的依赖包三,安装docker(离线节点)1. 依次执行docker的安装包2. 启动 ...

  10. 【已解决】每次打开Excel时会同时打开一个空的Excel表格

    每次打开Excel时会同时打开一个空的Excel表格,情况如图. 官方解法如下,本人验证有效: 方法1, 请到以后路径中检查是否存在与空白文件夹同名字的Excel文件,删除它. C:\Users\\A ...