Почему статическая переменная умирает в Asp.Net

Мы знаем, что статическая переменная живая до тех пор, пока приложение не будет.

Например, мы можем подсчитать количество посетителей с одной переменной static int.

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

Если приведенные выше предложения правы, мы можем определить a 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.

Почему и что я могу сделать для вечного таймера?

+4
источник поделиться
1 ответ

Статические переменные сохраняются для жизни домена приложения. Таким образом, два вещи, которые заставят ваши статические переменные "reset", - это приложение перезапуск домена или использование нового класса.

вы теряете свою статическую переменную на своей странице aspx, потому что asp.net решает перекомпилировать вашу страницу в новом классе.

взгляните на эту ссылку Понимание динамической компиляции ASP.NET

поэтому, если вы хотите выполнить некоторую задачу в определенном интервале, есть много решений, я думаю, вам стоит взглянуть на эту Запуск задачи в фоновом режиме или это кажется лучшей идеей asp.net долгие интервальные задачи

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос