簡體   English   中英

為什么靜態變量在Asp.Net中死亡

[英]Why static variable dies in Asp.Net

我們知道靜態變量存活直到應用程序存活

例如,我們可以使用單個static int變量計算訪問者的數量。

private static int numberOfVisitors = 0;
protected void Page_Load(object sender, EventArgs e)
{
    numberOfVisitors++;
}

如果上面的句子是正確的,我們可以定義一個static Timer ,我們期望Elapsed事件永遠消失。

所以,我寫了這個應用程序:

public partial class WebForm1 : System.Web.UI.Page
{
    private static System.Timers.Timer timer = new System.Timers.Timer(100);
    private static int numberOfTicks = 0;

    protected void Page_Load(object sender, EventArgs e)
    {
        Label1.Text = numberOfTicks.ToString();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        timer.Elapsed += timer_Elapsed;
        timer.Start();
    }

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        numberOfTicks++;

    }
}

單擊Button1幾分鍾后, Lable1.Text每毫秒增加一次,但是15分鍾過后,這個標簽只顯示0

為什么以及我能為永久計時器做些什么

靜態變量在app域的生命周期內持續存在。 因此,導致靜態變量“重置”的兩件事是應用程序域重新啟動或使用新類。

你在aspx頁面中丟失了靜態變量,因為asp.net決定在新類中重新編譯你的頁面。

看看這個鏈接了解ASP.NET動態編譯

所以,如果你想在特定的時間間隔內執行一些任務,我認為你應該在后台看一下這個運行任務,或者這個似乎是一個更好的主意asp.net長時間運行間隔任務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM