Клиентское кэширование C#
Мой wpf-клиент загружает много постоянных данных при запуске с сервера. Итак, я хочу реализовать стратегию кэширования на стороне клиента.
Я знаю о новом пространстве имен System.Runtime.Caching в.NET Framework 4. К сожалению, существует только кэширование памяти. Я не хочу загружать огромное количество данных при каждом запуске клиента. Поэтому я ищу постоянное клиентское кеширование.
Что вы думаете об этом?
Другая идея заключалась в том, что я использую OODB (например, db4o или VelocityDB) для кэширования клиента. Это плохая идея? У меня нет никакого опыта в кэшировании клиентов.
Спасибо за ваши ответы и предложения.
С уважением, про
1 ответ
То, как вы храните данные на стороне клиента, не имеет большого значения. Я бы заглянул в IsolatedStorage для ваших целей. Что может быть сложнее, так это сказать, когда кеш становится устаревшим. Это действительно то, что хорошо в System.Runtime.Caching. Изменяются ли данные сервера вообще или только после нового выпуска приложения? Если данные изменяются только после нового выпуска, вы можете включить их в качестве ресурсов в настройку приложения. Если нет, у вас должен быть какой-то тайм-аут или сигнал, который сообщает клиенту, что пришло время проверить измененные данные на сервере. Вы уже рассматривали ленивую загрузку данных? Таким образом, задержка, вероятно, не произойдет полностью при запуске приложения и будет менее заметна, и, вероятно, вам даже не придется загружать полные данные в клиент.
Что касается тайм-аутов: в нашем приложении у нас есть фиксированный тайм-аут, который устанавливается для каждого списка ссылок при его первой загрузке, и каждый раз, когда он запрашивается из кэша, этот тайм-аут проверяется. Если срок его действия истек, кэш прозрачно обновляется перед возвратом списка. Это компромисс, потому что данные на стороне клиента могут быть устаревшими в течение некоторого времени. Мы принимаем это, потому что в нашем случае это не критично, и таким образом каждый список отвечает за себя, и нам не нужен центральный реестр, отслеживающий состояние каждого списка, чтобы установить тайм-аут извне.