У меня есть приложение С# WinForms с базой данных базы данных (oracle) и используйте NHibernate для сопоставления O/R. Я хотел бы как можно больше сократить связь с базой данных, так как сеть здесь довольно медленная, поэтому я прочитал о кэшировании второго уровня. Я нашел это неплохое введение, в котором перечислены следующие доступные реализации кэша.
Мне интересно , какую реализацию я должен использовать для своего приложения.
Кэширование должно быть простым, оно не должно значительно замедлять первое возникновение запроса, и не должно занимать много памяти для загрузки реализующих сборок. (С NHibernate и Castle приложение уже занимает до 80 МБ ОЗУ!)
- Скорость: использует Microsoft Velocity, который является высоко масштабируемым кэшем приложений в памяти для всех видов данных.
- Распространенность: использует Bamboo.Prevalence как поставщик кеша. Bamboo.Prevalence - это реализация .NET-концепции концепции распространенности объекта, воплощенной Клаусом Уэстефельдом в Prevayler. Bamboo.Prevalence обеспечивает прозрачность объекта для детерминированных систем, ориентированных на CLR. Он предлагает постоянное кэширование для интеллектуальных клиентских приложений.
- SysCache: использует System.Web.Caching.Cache в качестве поставщика кеша. Это означает, что вы можете полагаться на функцию кэширования ASP.NET, чтобы понять, как она работает.
- SysCache2: похож на NHibernate.Caches.SysCache, использует кеш ASP.NET. Этот провайдер также поддерживает истечение срока службы на основе зависимостей SQL, что означает, что можно настроить, чтобы определенные области кеша автоматически истекали, когда изменяются соответствующие данные в базе данных.
- MemCache: использует memcached; memcached - это высокопроизводительная система кэширования объектов с распределенной памятью, общая по своей природе, но предназначенная для ускорения динамических веб-приложений путем облегчения загрузки базы данных. В основном распределенная хеш-таблица.
- SharedCache: высокопроизводительная, распределенная и реплицированная система кэширования объектов памяти. См. Здесь и здесь для получения дополнительной информации.
Мои соображения до сих пор были:
- Скорость кажется довольно тяжелой и перегруженной (файлы полностью занимают 467 Кбайт дискового пространства, не измеряли оперативную память, которую она занимает до сих пор, потому что мне не удалось запустить ее, см. ниже).
- Распространенность, по крайней мере, с моей первой попытки, замедлила мой запрос с ~ 0,5 с до ~ 5 секунд, а кэширование не работало (см. ниже)
- SysCache, похоже, для ASP.NET, а не для winforms.
- MemCache и SharedCache, по-видимому, предназначены для распределенных сценариев.
Какой из них вы бы предложили мне использовать? Также была бы встроенная реализация, которая, конечно, очень легкая, но ссылка на статью говорит мне, что я "(...) никогда не следует использовать этот поставщик кеша для производственного кода, но только для тестирования."
Помимо вопроса, который лучше всего подходит для моей ситуации, я также столкнулся с проблемами с их применением:
-
Velocity жаловалась, что тег "dcacheClient" не указан в файле конфигурации приложения. Укажите действительный тег в файле конфигурации ", хотя я создал файл app.config для сборки и вставил пример из в эту статью.
-
Распространенность, как упоминалось выше, сильно замедлила мой первый запрос, и в следующий раз, когда был выполнен тот же самый запрос, другой выбор был отправлен в базу данных. Может быть, я должен "экстернализировать" эту тему в другой пост. Я сделаю это, если кто-то скажет мне, что совершенно необычно, что запрос так сильно замедляется, и ему нужны дополнительные подробности, чтобы помочь мне.