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 范围和生命周期说明的主要内容,如果未能解决你的问题,请参考以下文章