ASP.NET的Application详解

ASP.NET中的Application

1、 Application是用于保存所有用户共有的信息。在ASP时代,如果要保存的数据在应用程序生存期内不会或者很少改变,那么使用Application是理想的选择。但是在ASP。NET开发环境中,程序员通常把类似的配置数据放在Web.config中。如果要使用Application,要注意所有的写操作度都要在Global.asax文件中的Application_OnStart事件中完成。

  //下面的代码是在Global.asax文件中设置

  Application.Lock();

  Application[“UserId”]=”Hello kitty”;

  Application.UnLock();

  以下是在页面中调用Application

  String UserId=Application[“UserId”].ToString();

2、Application的特性:

 1、信息量大小为任意大小

 2、应用于整个应用程序/所有用户

 3、保存在服务器端

 4、作用域和保存时间是在整个应用程序的生命期

3、如果在应用程序中使用Application对象,一个需要考虑的问题就是任何写操作都要在Global文件中的Application_OnStart事件中完成。尽管使用了Application.Lock()和Application.UnLock()方法来避免同步操作,但是由于它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性能瓶颈,因此最好不要在此对象中保存大的数据集合。

4、下面使用Application实现在线用户统计,记录同时现在人数和网站总访问人数。

 using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.ComponentModel;

using System.IO;

using System.Web.SessionState;

 

/// <summary>

///Global 的摘要说明

/// </summary>

public class Global:System.Web.HttpApplication

{

    private System.ComponentModel.IContainer component = null;//必要的设计器变量

    private FileStream fileStream;

    private StreamReader reader; //读字符流

    private StreamWriter writer;//写字符流

       public Global()

       {

       

       }

    /// <summary>

    /// 网站程序启动

    /// </summary>

    /// <param name="sender"></param>

    /// <param name="e"></param>

    protected void Application_Start(object sender,EventArgs e)

    {

        Application["currentUser"] = 0;//初始化在线用户

        //加载文件流,如果文件不存在则创建文件

        fileStream = new FileStream(Server.MapPath("~/count.txt"),FileMode.OpenOrCreate);

        reader = new StreamReader(fileStream);//使用流读取文件

        Application["AllUser"] = Convert.ToInt32(reader.ReadLine());//将文件中的记录存入总访问数中

        reader.Close();//关闭流

    }

    /// <summary>

    /// 会话开始 ,当用户访问网站时,在线用户+1,总访问数+1

    /// </summary>

    /// <param name="sender"></param>

    /// <param name="e"></param>

    protected void Session_Start(object sender, EventArgs e)

    {

        Application.Lock();//锁定,防止同时录入

        Application["currentUser"] = (int)Application["currentUser"] + 1;

        Application["AllUser"] = (int)Application["AllUser"] + 1;

        fileStream = new FileStream(Server.MapPath("~/count.txt"), FileMode.OpenOrCreate, FileAccess.Write);

        //写入流

        writer = new StreamWriter(fileStream);

        //把总访问数再次写入count.txt文件中

        writer.WriteLine(Application["AllUser"].ToString());

        writer.Close();//关闭写入流

        Application.UnLock();//解开锁定

    }

    /// <summary>

    /// 会话结束

    /// </summary>

    /// <param name="sender"></param>

    /// <param name="e"></param>

    protected void Session_End(object sender, EventArgs e)

    {

        Application.Lock();

        Application["currentUser"] = (int)Application["currentUser"] - 1;

        Application.UnLock();

    }

  

}

posted @ 2013-04-11 18:55  罗导  阅读(723)  评论(0编辑  收藏  举报