[英]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.