2014-11-12 2 views
-1

Я использую класс, который использует статический объект ConcurrentDictionary для целей кеширования. Когда запрашиваются данные, он сначала просматривается в ConcurrentDictionary. Если он не найден там, он извлекается из базы данных и помещается в ConcurrentDictionary.Где на сервере хранятся статические параллельные коллекции?

Данные хранятся в этой коллекции по нескольким запросам, как и должно быть. Но является ли это особым поведением из-за того, что он является ConcurrentDictionary вместо обычного словаря, или это просто поведение любого статического объекта?

Кроме того, иногда, когда я загружаю страницу, она должна перезагружать данные из базы данных. Где хранятся эти данные и что может привести к очистке этого кеша/словаря? Есть ли в IIS параметр тайм-аута для веб-сайта или пула приложений, который контролирует это?

+0

Любые отзывы о том, почему это было приостановлено? – GendoIkari

ответ

1

ConcurrentDictionary отлично подходит для работы с несколькими потоками - он предотвращает несколько операций «записи» на один и тот же ключ.

A static переменная велика при работе с общими данными по нескольким запросам/пользователям (но не может быть потокобезопасной).

Так короче:

  • Она в настоящее время разделен между несколькими пользователями из-за его атрибута static.
  • Это препятствует несколько потоков от доступа к словарю, потому что сво ConcurrentDictionary

Что касается второй части вопросов:

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

L ook в этом ответе: How and when are c# Static members disposed?

+0

Спасибо. Но когда загружается домен приложения? Должна ли она оставаться неопределенной, если IIS или сервер хостинга не будут перезапущены? Или есть где-то тайм-аут? – GendoIkari

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