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

eug*_*100 3 c# asp.net variables static .net-4.5

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

它具有一页和一个按钮以及以下代码的页面:

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();
  }
}
Run Code Online (Sandbox Code Playgroud)

一类:

public class Class1
{
  public Class1()
  {
  }
  public static int st = 0;
  public static void SetValue()
  {
    st = 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

public static int st = 0;
Run Code Online (Sandbox Code Playgroud)

当用户单击Button时执行,这就是将st更改为零的原因。我只能在框架4.5中重现此行为:在框架3.5中不会发生。有人可以解释我这种行为吗?

Den*_*nis 5

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

因此,您确实不应该在Web应用程序中依赖静态。