NHibernate какой кеш использовать для приложения WinForms

У меня есть приложение 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам