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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人