Подтвердить что ты не робот

Кэш памяти или параллельный словарь?

Я ищу для реализации кэширования на уровне запроса для службы WCF. Каждый запрос к этой службе выполняет большое количество запросов к базе данных. Подумайте о нескольких сборщиках данных. Нам нужно разрешить одному сборщику данных получать доступ к информации, уже полученной предыдущим сборщиком данных.

Я искал использование нового кэша памяти .Net 4.0 для этого, создав конкретный экземпляр для запроса.

Это хорошая идея? Или просто я должен использовать объект Dictionary?

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

4b9b3361

Ответ 1

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

Если вам нужно, чтобы ваши товары истекали, вам лучше использовать встроенный MemoryCache и реализовать дважды проверенный шаблон блокировки, чтобы гарантировать единый поиск элементов кэша. Готовое к использованию выполнение двойной проверки блокировки можно найти в Блокировка шаблона для правильного использования .NET MemoryCache