NHibernate какой кеш использовать для приложения WinForms - PullRequest
11 голосов
/ 18 июня 2010

У меня есть приложение 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 для сборки и вставил пример из этой статьи .

  • Распространенность,как уже упоминалось выше, сильно замедлился мой первый запрос, и в следующий раз, когда точно такой же запрос был выполнен, в базу данных был отправлен другой выбор. Может быть, мне следует «перенести» эту тему в другой пост.совершенно необычно, что запрос так сильно замедляется, и ему нужны дополнительные сведения, чтобы помочь мне.

1 Ответ

3 голосов
/ 18 июня 2010

SysCache использует кэш «ASP.NET» только потому, что он единственный, включенный в .NET 2.x / 3.x (.NET 4 включает отдельную сборку System.Runtime.Caching)

Этоможет без проблем использоваться в настольных приложениях (я использую это прямо сейчас), и это почти не требует настройки.

Теперь, ваши соображения по поводу памяти, кажется, немного не соответствуют нынешнему столетию.За последние годы ни одна машина не поставлялась с объемом менее 1 ГБ, а у большинства от 2 до 8 ГБ, поэтому 80 МБ - это, по сути, ничто.Браузер, в котором я пишу это, занимает 220 МБ.

Сама сущность кэширования заключается в использовании ресурса (обычно памяти, диска в некоторых случаях), чтобы уменьшить использованиемедленнее (сеть)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...