ObjectCache или локальные поля для моей службы WCF?
У меня есть сервис, на котором я хотел реализовать какое-то кэширование, но не уверен, стоит ли мне использовать ObjectCache в.NET 4 или просто иметь частные поля в сервисе, которые через некоторое время обновляются.
Ситуация следующая: служба используется для возврата больших порций данных. В настоящее время мы попадаем в базу данных для каждого запроса к сервису. Эти данные обновляются только один раз в день в полночь. Я хочу кэшировать эти данные в сервисе и обновлять их каждую ночь после обновления базы данных (скажем, около 12:30).
Теперь, в прошлом, мы заполняли локальные поля и создавали "поток мониторинга", который работал бы постоянно и через какое-то определенное время повторно заполнял эти поля. Одним из недостатков, который я увидел, было то, что у класса обслуживания был некоторый дополнительный код для хранения.
Если я переключаюсь на ObjectCache, одним из преимуществ является автоматическое удаление по истечении срока действия. Я думал о том, чтобы назначить метод обратного вызова делегату CacheEntryRemovedCallback и, когда он был вызван, просто повторно кэшировать данные в какой-то момент в будущем (~30 минут после обновления базы данных).
Мой вопрос для службы WCF, что является более желательным вариантом для кэширования данных?
1 ответ
Использование System.Runtime.Caching
, Это лучше, чем доморощенный велосипед.
Ты можешь использовать SqlChangeMonitor
если ваши данные обновляются только в полночь. Это значительно упростит логику, и ваш кеш будет синхронизирован с данными.
http://www.codeproject.com/Articles/167282/NET-4-0-MemoryCache-with-SqlChangeMonitor