Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Объект Application






Объект Application во многом аналогичен объекту Session. Различие заключается только в том, что данные, хранящиеся в нем, глобальны для всего приложения. Это так называемое состояние приложения, доступ к данным которого может получить любой клиент.

Состояние приложения похоже на состояние сеанса, т. к. хранит информацию на сервере, позволяет сохранять объекты такого же типа и использует формат " имя-значение" для хранения данных.

С помощью состояния приложения можно создать счетчик и отслеживать информацию о том, сколько раз то или иное действие выполнялось всеми клиентами данного приложения.



Для этого можно воспользоваться следующим кодом:

protected void Page_Load(object sender, EventArgs e){ int count; if (Application[" HitsNumber" ] == null) { Application[" HitsNumber" ] = 1; count = (int)Application[" HitsNumber" ]; Label1.Text = count.ToString(); return; } count = (int)Application[" HitsNumber" ]; count++; Application[" HitsNumber" ]=count; Label1.Text = count.ToString(); }

Время жизни элементов состояния приложения никогда не истекает - они существуют до тех пор, пока приложение или сервер не будут перезапущены.

В современной практике состояние приложения применяется крайне редко, т. к. не является эффективным. Так, предыдущий пример не гарантирует корректного отображения значения счетчика. Это происходит в том случае, если к приложению одновременно обращаются несколько клиентов. В этом случае каждый из них считывает одно и то же текущее значение состояния приложения HitsNumber, затем увеличивает его на единицу и вновь записывает в состояние приложения. Таким образом, все одновременные подключения, сколько бы их ни было, приводят к увеличению состояния приложения лишь на единицу. Для того чтобы избежать этой проблемы, возможно применение методов Lock() и Unlock(), которые позволяют одновременно получить доступ к коллекции только одному клиенту. Например, таким образом:

protected void Page_Load(object sender, EventArgs e){ int count; Application.Lock(); if (Application[" HitsNumber" ] == null) { Application[" HitsNumber" ] = 1; count = (int)Application[" HitsNumber" ]; Label1.Text = count.ToString(); return; } count = (int)Application[" HitsNumber" ]; count++; Application[" HitsNumber" ]=count; Application.UnLock(); Label1.Text = count.ToString(); }

Недостатком этого подхода является то, что все клиенты, которые запрашивают страницу, должны ожидать, пока коллекция Application не освободится. Это может привести к задержкам и значительно снизить производительность приложения. Вот почему рекомендуется использовать файл web.config для хранения констант уровня приложения, а часто используемую информацию лучше всего сохранять в кэше ASP.NET.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.