2009-05-12 2 views
3

Существует an article, который рекомендует хранить состояние приложения ASP.NET в статических членах HttpApplication class (in Global.asax.cs).Статические переменные в ASP.NET

Как насчет сохранения состояния приложения в статических элементах других классов?

Я попытался сделать это, и кажется, что существует несколько экземпляров этих переменных (один экземпляр на AppDomain?). Это правда, и мы должны всегда использовать только Приложение статические поля класса? Или это не имеет значения?

ответ

3

Он работает очень хорошо, и во многих случаях он лучше, чем Application (он, строго типизированный, например). Просто убедитесь, что вы знаете о проблемах с потоками и блокировкой.

Как персональный опыт, мне удалось кэшировать конфигурационную информацию для приложения ASP.NET в классе static на нескольких веб-сайтах.

1

Это правда, и мы всегда должны использовать только статические поля класса приложения?

Да. Пользовательские данные (данные сеанса) не должны идти здесь.

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

+0

Я столкнулся с этим кодом, который унаследовал от другого разработчика. Клиент пытался понять, почему мелкомасштабные многопользовательские тесты не справляются со странными данными. Когда я увидел код и объяснил проблему, результатом стал коллективный * headlap! * Довольно легко исправить, и теперь у нас есть клиент на всю жизнь. :) –

3

Вы можете столкнуться с большими проблемами со статическими переменными, если вы делаете что-то большее, чем просто чтение из них в веб-приложении. Asp.net - многопоточная среда. Коллекция приложений блокирует вас во время Get или Set с блокировкой. Если вы используете статические переменные, тогда нет блокировки.

Я бы предложил использовать web.config для хранения всех ваших переменных только для чтения в своем собственном разделе.

Смежные вопросы