Практическое руководство. Сохранение значений в состоянии приложения
Обновлен: Ноябрь 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;
Запись значения в состояние приложения с блокировкой
Доступ к переменным состояния приложения могут получить несколько потоков одновременно. Таким образом, чтобы предотвратить запись недопустимых данных, перед установкой значений необходимо заблокировать состояние приложения для записи только одним потоком.
Примечание. |
---|
Необходимо изменять состояние данных приложения в операторе блокировки до тех пор, пока не будет установлен другой тип блокировки. Дополнительные сведения см. в разделе Синхронизация данных для многопоточности. |
Запись значения в состояние приложения с блокировкой
В коде, в котором была задана переменная приложения, вызовите метод 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();
См. также
Задачи
Практическое руководство. Считывание значений из состояния приложения
Основные понятия
Общие сведения об управлении состоянием ASP.NET
Рекомендации по управлению состоянием ASP.NET