运维开发网

在C#中为什么静态变量在Asp.Net中死掉

运维开发网 https://www.qedev.com 2020-04-03 17:29 出处:网络 作者:运维开发网整理
我们知道静态变量存活直到应用程序存活. 例如,我们可以使用单个静态int变量计算访问者的数量. private static int numberOfVisitors = 0; protected void Page_Load(object sender, EventArgs e) { numberOfVisitors++; } 如果上面的句子是正确的,我们可以定义一个静态计时器,我们期望
我们知道静态变量存活直到应用程序存活.

例如,我们可以使用单个静态int变量计算访问者的数量.

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

如果上面的句子是正确的,我们可以定义一个静态计时器,我们期望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

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号