2011-04-05 109 views
3

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

欢迎任何意见或想法。 谢谢! -Elad

回答

3

应用程序级变量具有应用程序的生命周期。这意味着应用程序池被回收,它们被丢弃。
应用程序池可以由于不同的原因而被回收。可以对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文件,以便您做好准备,轻松地重新填充您的属性。 一个数据库也可以。 我会对会话计数器做同样的事情。

+0

谢谢你的详细回复!所以你说你不会使用应用程序级变量来存储会话计数器? – 2011-04-05 08:30:15

+1

不,我不会将它用于应用程序计数器,因为它可能会被回收,因此您无法依赖它。对于一个会议应该没问题。 – LeftyX 2011-04-05 09:27:51

+0

非常感谢。那只是我正在寻找的信息。 – 2011-04-05 09:34:23