Я храню некоторую информацию в статических переменных, определенных в классе страниц (а не в Global.asax). Я объявляю только переменную в коде:Пожизненная статическая переменная ASP.NET
protected static int SomeGlobalUnsecureID;
protected static string SomeGlobalUnsecureString;
и определить переменную в событии PageLoad. Например, я проверяю идентификатор из базы данных, если он отличается от SomeGlobalUnsecureID, я обновляю SomeGlobalUnsecureID и String из другого места, в противном случае оставляю их как есть. Это совершенно безопасно в моем приложении. логика (т. е. эти данные небезопасны, каждый может получить к ним доступ, без проблем); Единственное, что я хочу сделать это
Держите одинаковое количество памяти, независимо от пользователей, подключенным
Изменения тогда и только тогда, когда настойчивая информация отличается от того, в «памяти» (потому что на самом деле чтение строка отнимает много времени для меня.
Теперь, так как я делаю чек в PageLoad, у меня нет никаких проблем в перезагружаются страниц. Однако моя страница полна WebMethods, а иногда я вижу ТНА t статические переменные обнуляются. И странная часть; сеанс по-прежнему активен, даже если статические переменные обнулены (so-> нет перезапуска сервера или приложения пула и т. д.)
Это действительно странно для меня. Я предполагаю, что статическая переменная будет содержать свое значение до тех пор, пока приложение (каким-то образом) не закончится. Но даже сеанс не закончился, статическая переменная обнуляется. Что ты предлагаешь? Использует ли переменные приложения лучший выбор? Все документы, которые я читал в Интернете, предлагают статические переменные вместо переменных приложения, нужно ли их объявлять как-то иначе?
Объявления в верхней части вашего вопроса: * не * статические, кстати. –
:) ok, исправлено –
'определить переменную в событии PageLoad.' Я думаю, вы имеете в виду инициализацию? Определение переменной - это то, что вы делаете, когда пишете 'protected static int Something;' –