3

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

它有一页有一个按钮和以下代码:

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。如果用户单击按钮,有时您会看到 st=0,有时会看到 st=1。在调试中我看到有时命令

public static int st = 0;

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

4

2 回答 2

5

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

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

于 2013-05-07T20:07:32.583 回答
3

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

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

于 2013-05-07T20:07:36.560 回答