Практическое руководство. Сохранение значений в состоянии приложения

Visual Studio 2010

Обновлен: Ноябрь 2007

Состояние приложения является хранилищем данных, которые доступны всем классам в приложении ASP.NET. Состояние приложения хранится в памяти на сервере и работа с ним выполняется быстрее, чем при хранении и извлечении информации из базы данных. В отличие от состояния сеанса, которое относится к сеансу одного пользователя, состояние приложения применяется ко всем пользователям и сеансам. Таким образом, состояние приложения является удобным местом для хранения часто используемых данных небольшого объема, которые не изменяются в зависимости от пользователя.

Состояние приложения хранится в классе HttpApplicationState, новый экземпляр которого создается при первом обращении пользователя к любому URL-ресурсу в приложении. Работа с классом HttpApplicationState реализуется через свойство Application.

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

Состояние приложения хранится в памяти на сервере, поэтому большой объем данных в состоянии приложения может быстро израсходовать память сервера. При перезапуске приложения данные состояния приложения будут потеряны. Состояние приложения не разделяется между несколькими серверами внутри веб-фермы или между рабочими процессами веб-сада. Наконец, состояние приложения доступно из всех потоков, поэтому любые данные, хранящиеся в состоянии приложения, должны иметь встроенную поддержку синхронизации. Дополнительные сведения см. в разделах Общие сведения о состоянии приложения ASP.NET и Рекомендации по управлению состоянием ASP.NET.

Запись значения в состояние приложения

  • В приложении задайте значение переменной в классе HttpApplicationState.

    В следующем примере кода показано, как можно задать переменную приложения Message в строке.

    Application("Message") = "Welcome to the Contoso site."
    

    Application["Message"] = "Welcome to the Contoso site.";
    

Запись значения в состояние приложения при запуске приложения

  • В обработчике Application_Start файла Global.asax приложения задайте значение переменной состояния приложения. Как и в обычной странице ASPX, класс HttpApplicationState предоставляется через объект Application.

    В следующем примере показано, как можно задать переменную приложения Message в строке и инициализировать переменную PageRequestCount в 0.

    Application("Message") = "Welcome to the Contoso site."
    Application("PageRequestCount") = 0
    

    Application["Message"] = "Welcome to the Contoso site.";
    Application["PageRequestCount"] = 0;
    

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

94xkskdf.alert_note(ru-ru,VS.100).gifПримечание.

Необходимо изменять состояние данных приложения в операторе блокировки до тех пор, пока не будет установлен другой тип блокировки. Дополнительные сведения см. в разделе Синхронизация данных для многопоточности.

Запись значения в состояние приложения с блокировкой

  • В коде, в котором была задана переменная приложения, вызовите метод HttpApplicationState.Lock, установите значение состояния приложения и затем вызовите метод HttpApplicationState.UnLock, чтобы разблокировать состояние приложения, освобождая его для других запросов записи.

    В следующем примере кода показано, как заблокировать и разблокировать состояние приложения. Код увеличивает значение переменной PageRequestCount на 1, а затем снимает блокировку состояния приложения.

    Application.Lock()
    Application("PageRequestCount") = _
        CInt(Application("PageRequestCount")) + 1
    Application.UnLock()
    

    Application.Lock();
    Application["PageRequestCount"] = 
        ((int)Application["PageRequestCount"])+1;
    Application.UnLock();
    
Показ: