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

Я имею приложение C# WinForms с бэкендом базы данных (оракул) и использую NHibernate для отображения O/R. Я хотел бы уменьшить коммуникацию до базы данных как можно больше, так как сеть в здесь является довольно медленной, таким образом, я читал о втором кэшировании уровня. Я нашел это довольно хорошее введение, которое перечисляет следующие доступные реализации кэша.

Я задаюсь вопросом, какую реализацию я должен использовать для своего приложения.

Кэширование должно быть простым, оно не должно значительно замедлять первое вхождение запроса, и не должна требоваться большой памяти для загрузки блоков реализации. (С NHibernate и Замком, приложение уже берет до 80 МБ RAM!)

  • Скорость: Microsoft Velocity использования, которая является хорошо масштабируемым кэшем приложения в оперативной памяти для всех видов данных.
  • Распространенность: Бамбук использования. Распространенность как поставщик кэша. Бамбук. Распространенность является реализацией.NET объектного понятия распространенности, воплощенного в жизнь Klaus Wuestefeld в Prevayler. Бамбук. Распространенность предоставляет персистентность прозрачного объекта детерминированным системам, предназначающимся для CLR. Это предлагает персистентное кэширование для умных клиентских приложений.
  • SysCache: Система Использования. Сеть. Кэширование. Кэш как поставщик кэша. Это означает, что можно полагаться на возможность кэширования ASP.NET, чтобы понять, как она работает.
  • SysCache2: Подобный NHibernate. Кэши. SysCache, кэш ASP.NET использования. Этот поставщик также поддерживает SQL основанное на зависимости истечение, подразумевая, что возможно настроить определенные регионы кэша для автоматического истечения, когда соответствующие данные в базе данных изменяются.
  • MemCache: использование memcached; memcached является высокоэффективным объектом распределенной памяти кэширующаяся система, универсальная по своей природе, но предназначенная для использования в ускорении динамических веб-приложений путем облегчения загрузки базы данных. В основном распределенная хеш-таблица.
  • SharedCache: высокоэффективный, распределенный и копируемый объект памяти кэширующаяся система. Посмотрите здесь и здесь для большего количества информации

Мои соображения до сих пор были:

  • Скорость кажется довольно тяжелой, и излишество (файлы полностью берут 467 КБ дискового пространства, не измерили RAM, которую это берет до сих пор, потому что мне не удалось заставить его работать, посмотрите ниже),
  • Распространенность, по крайней мере, в моей первой попытке, замедлила мой запрос от ~0.5 secs до ~5 secs, и кэширование не работало (см. ниже),
  • SysCache, кажется, для ASP.NET, не для winforms.
  • MemCache и SharedCache, кажется, для распределенных сценариев.

Какой Вы предложили бы, чтобы я использовал? Также была бы встроенная реализация, которая, конечно, очень легка, но статья, на которую ссылаются, говорит мне, что я" (...) никогда не должен использовать этого поставщика кэша для производственного кода, но только для тестирования."

Помимо вопроса, который подходит лучше всего в мою ситуацию, я также столкнулся с проблемами с применением их:

  • Скорость жаловалась что тег "dcacheClient", не указанный в файле конфигурации приложения. Укажите допустимый тег в конфигурационном файле", хотя я создал app.config файл для блока и вставил пример от этой статьи.

  • Распространенность, как упомянуто выше, в большой степени замедлила мой первый запрос, и в следующий раз, когда тот же самый запрос выполнялся, другой выбор был отправлен в базу данных. Возможно, я должен "воплотить" эту тему в другое сообщение. Я сделаю это, если кто-то скажет мне, что абсолютно необычно, что запрос замедлен так, и ему нужна более подробная информация для помощи мне.

11
задан chiccodoro 8 March 2012 в 12:33
поделиться

1 ответ

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

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

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

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

.
3
ответ дан 3 December 2019 в 12:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: