У меня есть приложение C # WinForms с базой данных (оракул) и я использую NHibernate для отображения O / R.Я хотел бы максимально сократить обмен данными с базой данных, поскольку сеть здесь довольно медленная, поэтому я прочитал о кэшировании второго уровня.Я нашел это неплохое введение , в котором перечислены следующие доступные реализации кэша.
Мне интересно , какую реализацию мне следует использовать для моего приложения .
Кэширование должно быть простым, оно не должно значительно замедлять первое появление запроса и не должно занимать много памяти для загрузки исполняющих сборок.(С NHibernate и Castle приложение уже занимает до 80 МБ ОЗУ!)
- Velocity: использует 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 для сборки и вставил пример из этой статьи .
Распространенность,как уже упоминалось выше, сильно замедлился мой первый запрос, и в следующий раз, когда точно такой же запрос был выполнен, в базу данных был отправлен другой выбор. Может быть, мне следует «перенести» эту тему в другой пост.совершенно необычно, что запрос так сильно замедляется, и ему нужны дополнительные сведения, чтобы помочь мне.