ASP.NET: жизненный цикл приложения, статические переменные

Класс на моем веб-сайте ASP.NET должен обращаться к таблице базы данных несколько раз для каждого запроса. Таблица базы данных должна редко меняться, если вообще когда-либо. Может пару раз в месяц.

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

Мой вопрос касается срока службы этой кэшированной статической версии таблицы.

Я понимаю, что он извлекается при первом создании экземпляра класса или использовании статического метода в классе. Но как часто это происходит на веб-сервере? Что, если таблица изменится, и мы захотим сбросить эту статическую версию таблицы?

По сути, мне интересно, эта таблица извлекается один раз, а затем обновляется только каждый раз, когда я перезапускаю IIS? Что, в отношении сайта и IIS, вызовет сброс этого статического класса, что вызовет повторную выборку статической таблицы?


person PostgresQLNewb    schedule 16.03.2011    source источник


Ответы (3)


Вместо статической переменной в классе, почему бы не добавить ее в коллекцию «Приложение»? Его время жизни хорошо известно (срок жизни веб-сайта) и может быть легко переработано, коснувшись web.config. Заполните его в методе Application_Start файла global.asax.

person n8wrl    schedule 16.03.2011

Я бы рекомендовал использовать сам кеш ASP.NET, а не иметь переменные для каждого конкретного элемента кеша (сейчас это одна таблица, но я уверен, что есть возможности для роста); таким образом вы можете указать срок действия, среди прочего, например, зависимости.

Вы можете получить информацию о кеше здесь, а точнее, с помощью кэша здесь.

Чтобы ответить на ваш вопрос о жизненном цикле или ожидании локальной переменной, см. эту ссылка, которая должна лучше объяснять внутренности, чем I.

person Grant Thomas    schedule 16.03.2011

По сути, мне интересно, эта таблица извлекается один раз, а затем обновляется только каждый раз, когда я перезапускаю IIS?

Да, у тебя есть это место. По сути, перезапуск IIS приведет к «обновлению» вашей статической переменной. Если вы используете статическую переменную для хранения такого рода вещей (что может быть не лучшим решением, но я пытаюсь напрямую ответить на ваш вопрос, не отвлекаясь), я бы посоветовал вам встроить некоторый код в свой уровень данных, чтобы ваш статическая переменная обновляется каждый раз, когда выполняется запись в рассматриваемую таблицу базы данных. Это будет означать, что вам не нужно перезагружать сервер каждый раз, когда вы его обновляете.

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

person Martyn    schedule 16.03.2011