• ASP.NET的Application简介1


    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;//写字符流
    
        /// <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>
        protected void Session_End(object sender, EventArgs e)
        {
            Application.Lock();
            Application["currentUser"] = (int)Application["currentUser"] - 1;
            Application.UnLock();
        }
    }

     

  • 相关阅读:
    P2617 Dynamic Rankings 动态主席树
    P4338 [ZJOI2018]历史 LCT+树形DP
    P3348 [ZJOI2016]大森林
    P3613 睡觉困难综合征 LCT+贪心+位运算
    SP16549 QTREE6
    P3703 [SDOI2017]树点涂色 LCT维护颜色+线段树维护dfs序+倍增LCA
    U19464 山村游历(Wander) LCT维护子树大小
    P4219 [BJOI2014]大融合 LCT维护子树大小
    P2542 [AHOI2005]航线规划 LCT维护双连通分量
    P3950 部落冲突
  • 原文地址:https://www.cnblogs.com/tianma3798/p/4143647.html
Copyright © 2020-2023  润新知