繁体   English   中英

网站中静态变量的奇怪行为

[英]Strange behavior of static variables in a web site

我准备了一个非常简单的网站来演示这种行为。

它有一个页面,一个Button和以下代码:

public partial class TestStatic : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
        Class1.SetValue();
        Label1.Text = Class1.st.ToString();
    }
  }
  protected void Button1_Click(object sender, EventArgs e)
  {
    Label1.Text = Class1.st.ToString();
  }
}

和一节课:

public class Class1
{
  public Class1()
  {
  }
  public static int st = 0;
  public static void SetValue()
  {
    st = 1;
  }
}

因此,当页面加载时,您会在Label1中看到st = 1。 如果用户点击Buttton,有时你可以看到st = 0,有时st = 1。 在调试中我看到有时命令

public static int st = 0;

当用户点击Button时执行,这就是st变为零的原因。 我只能在框架4.5中重现这种行为:它不会出现在框架3.5中。 有人能解释一下这种行为吗?

每个应用程序域实例都有静态数据。 由于托管(IIS)可以在网站调用之间卸载应用程序域,因此静态数据可能会丢失。

所以,你真的不应该依赖Web应用程序中的静态。

静态值在单个App Domain内的所有类实例之间共享。 如果您使用的是IIS Express,您的应用程序域可能会比您想象的更频繁地进行回收。

参考: ASP.NET静态变量的生命周期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM