【发布时间】:2008-10-28 11:05:56
【问题描述】:
我需要更改 Web 应用程序中对象的静态属性。该属性具有硬编码到对象中的默认值。如果我更改 Application_Start 中的静态属性,更改是否会生效:
A) 永远(嗯,直到应用程序被回收)
B) 直到对象被 GC'd 然后由下一个访问器重新初始化
C) 取决于
请注意,我要设置的属性只是一个字符串
【问题讨论】:
我需要更改 Web 应用程序中对象的静态属性。该属性具有硬编码到对象中的默认值。如果我更改 Application_Start 中的静态属性,更改是否会生效:
A) 永远(嗯,直到应用程序被回收)
B) 直到对象被 GC'd 然后由下一个访问器重新初始化
C) 取决于
请注意,我要设置的属性只是一个字符串
【问题讨论】:
静态变量的作用域是它的 AppDomain。所以不,它不会被垃圾回收 - 但如果 AppDomain 被回收(这在 ASP.NET 中可能会发生相当多的情况),那么您最终将有效地得到一个“新”静态变量。
【讨论】:
根据我在这里使用我们的 Web 应用程序的经验,答案是 A。据我所知,静态类永远不会被 GC,它在整个进程的生命周期中都存在(在这种情况下,ASP.NET 工作者过程)
【讨论】:
选择 A) 应用实例变量
上下文存储参考httpContext。
【讨论】: