Кэш памяти или параллельный словарь?
Я ищу для реализации кэширования на уровне запроса для службы WCF. Каждый запрос к этой службе выполняет большое количество запросов к базе данных. Подумайте о нескольких сборщиках данных. Нам нужно разрешить одному сборщику данных получать доступ к информации, уже полученной предыдущим сборщиком данных.
Я искал использование нового кэша памяти .Net 4.0 для этого, создав конкретный экземпляр для запроса.
Это хорошая идея? Или просто я должен использовать объект Dictionary?
BTW: сбор данных будет проходить параллельно, поэтому вокруг блокировки будет больше сложностей, но я также мог бы использовать для этого одновременные коллекции.
Ответы
Ответ 1
Если вам не нужна какая-то логика истечения срока действия, я бы предложил использовать параллельные коллекции. Вы можете легко реализовать механизм кэширования объединяя классы ConcurrentDictionary
и Lazy
. Вот ссылка о комбинации Lazy и ConcurrentDictionary.
Если вам нужно, чтобы ваши товары истекали, вам лучше использовать встроенный MemoryCache и реализовать дважды проверенный шаблон блокировки, чтобы гарантировать единый поиск элементов кэша. Готовое к использованию выполнение двойной проверки блокировки можно найти в Блокировка шаблона для правильного использования .NET MemoryCache