我做了一些实验。在来自 Login.aspx 按钮的 LoginButton_Click() 事件中,我有一段代码执行如下操作:
MyClass.MyPublicStaticString = LoginNameTextBox.Text;
登录后通过 FormsAuthentication 进入 Default.aspx。在 Default.aspx 上,我在 Page_Load() 上有一个代码,如下所示:
Label1.Text = MyClass.MyPublicStaticString.ToString();
等待几分钟后,即使 我的登录超时到期,Label1.Text 也变空了。
这里发生了什么?
最佳答案
静态字段(除非 [ThreadStatic]
)是每个应用程序域一个实例,这意味着:所有 请求共享相同 值。在 Web 应用程序中使用 static
时,您需要格外小心。如果有疑问:不要。
重新生命周期;应用域;它们在分配给静态字段时不会被收集,并且如果应用程序池在 IIS 中回收,它们将过期。
关于c# - .NET 公共(public)静态变量的 "lifespan"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261680/