gpt4 book ai didi

c# - 为什么静态变量在 Asp.Net 中消亡

转载 作者:行者123 更新时间:2023-11-30 12:42:46 24 4
gpt4 key购买 nike

我们知道静态变量活着直到应用程序活着

例如,我们可以使用单个 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

为什么以及我可以为永久计时器做什么

最佳答案

Static variables persist for the life of the app domain. So the two things that will cause your static variables to 'reset' is an app domain restart or the use of a new class.

您正在丢失 aspx 页面中的静态变量,因为 asp.net 决定在新类中重新编译您的页面。

看看这个链接Understanding ASP.NET Dynamic Compilation

所以,如果您想在特定时间间隔内执行某些任务,有很多解决方案,我认为您应该看看这个 Running task in background或者这个似乎是个更好的主意asp.net long running interval tasks

关于c# - 为什么静态变量在 Asp.Net 中消亡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32716925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com