global.asax 范围和生命周期说明

Posted

技术标签:

【中文标题】global.asax 范围和生命周期说明【英文标题】:global.asax scope and lifetime clarification 【发布时间】:2011-07-29 17:57:53 【问题描述】:

我需要在我目前正在处理的项目中实现几个应用程序级别的行为。 有几件事我需要弄清楚: 1. 在哪里以及如何定义应用程序级变量? 2. 这些变量的生命周期是多少?或者更准确地说,在什么情况下它们会被丢弃? (应用程序池回收?应用程序二进制文件从内存中删除并在下一个请求时重新编译?等等。) 3. global.asax 文件是放置会话计数器的好地方,还是将值存储到数据库/文件是保存此类数据的更好方法?

欢迎任何 cmets 或想法。 谢谢! -埃拉德

【问题讨论】:

【参考方案1】:

应用程序级变量具有应用程序生命周期。这意味着应用程序池被回收,它们被丢弃。 应用程序池可以出于不同的原因被回收。可以对 IIS 6/7 进行配置,以便在一定时间后、在一定数量的请求后或在指定的时间间隔后回收应用程序池。 您可以这样设置应用程序变量:

Application["DbConfig"] = "my value";

但您必须注意如果您尝试在不同的地方设置/访问可能会遇到的问题。您必须采用一种方法在变量更新时锁定它们。

我使用web.config 获取所有配置参数,然后我创建了自己的类来存储应用程序字段:

namespace Web.My

    public class Application
    
        public static string ApplicationStorageFolder
        
            get
            
                return (System.IO.Path.Combine(HttpContext.Current.Server.MapPath("~"), "_AppStorage"));
            
        
    

如果我需要设置一些字段,我会在应用程序启动时进行 Application_Start 如果您需要持久化信息,您可以创建自己的配置文件(xml 或简单文本)以在应用程序启动和关闭时存储和读取值。您可以在 XML 文件中序列化您的类,以便准备好它,轻松地重新填充您的属性。 一个数据库也可以。 我会对会话计数器做同样的事情。

【讨论】:

感谢您的详细回复!所以你说你不会使用应用级变量来存储会话计数器? 没有。我不会将它用于应用程序计数器,因为您不能依赖它,因为它可能会被回收。一个会话应该没问题。 非常感谢。这正是我正在寻找的信息。 没问题。如果您对msdn.microsoft.com/en-us/magazine/cc301579.aspx 感兴趣,可以在这里找到更多信息,并记住 asp.net 也有一个缓存对象,这在某些情况下非常有用asp.net/general/videos/…

以上是关于global.asax 范围和生命周期说明的主要内容,如果未能解决你的问题,请参考以下文章

如何确定变量是否具有范围和生命周期?

软件测试生命周期

项目管理02 | 项目管理基础-信息系统项目的生命周期模型

了解生命周期:最大生命周期和“静态”

React Native 学习-组件说明和生命周期

Dagger 2 组件、模块和范围的生命周期