Библиотека локального кэша C # (постоянная и зашифрованная) - PullRequest
5 голосов
/ 14 января 2011

Я хочу добавить кеширование в настольное приложение Windows, написанное на C # 4.

Мои требования касаются постоянного хранилища значений ключей, которое сохраняется в зашифрованный файл.Я пытаюсь кэшировать удаленные вызовы на сервер, которые могут быть медленными и могут кэшировать значительный объем данных, например, более 50 МБ.Я хотел бы иметь возможность установить значение максимального размера файла с некоторой формой истечения срока действия LRU.

Я думал о сериализации словаря, но это, вероятно, будет немного медленным для инициализации, и будетслишком большой объем памяти.

Я думаю, что зашифрованная база данных SQLCE 4 могла бы быть лучшим решением, но это кажется тяжелым, когда я действительно просто хочу одну хеш-таблицу.Кроме того, он изначально не предлагает функции типа кэширования с истекшим сроком действия и т. Д.

Ответы [ 5 ]

1 голос
/ 19 января 2011

Я бы посоветовал использовать SQLite поверх SQLCE 4. Механизм SQLlite явно предназначен для работы в средах с ограниченным объемом памяти. Решение о скорости памяти зависит от разработчика.

библиотека ADO.NET с открытым исходным кодом позволяет в полной мере воспользоваться инструментами баз данных Microsoft (DbProviderFactory, Entity Framework, Server Explorer и т. Д.). Он также изначально поддерживает шифрование.

Реализация LRU была бы довольно простой, учитывая схему, подобную следующей:

CREATE TABLE "cache" ("key" varchar(64) NOT NULL PRIMARY KEY, "value" text NOT NULL, "last_access" datetime NOT NULL);
CREATE INDEX "cache_lru" ON "cache" ("last_access");
1 голос
/ 18 января 2011

Вы должны обязательно рассмотреть сериализацию.Я ходил по кругу с этим (включая попытки SQLCE) несколько месяцев назад, и не было ничего похожего на скорость сериализованных объектов (в моем случае я использовал пользовательские объекты) - загрузка SQLCE в 2-3 раза дольше, чем сериализованныхобъекты.

Если объем памяти слишком велик, вам следует пересмотреть то, как вы проектируете то, что сохраняете.

0 голосов
/ 22 января 2011

Комбинация protobuf-net и Шифрование файлов в .NET может быть полезным.

Вы можете использовать protobuf-net для сериализации / десериализации быстро .(См. Руководство по началу работы для примера сохранения объекта Person в двоичном файле).Protobuf также имеет методы, которые возвращают байт [], так что вы можете передать его в крипто, чтобы избежать чтения потока байтов обратно.

0 голосов
/ 14 января 2011

Чтобы оптимизировать сериализацию, вы можете создать собственный метод сериализации, реализовав интерфейс ISerializable и превратив его в XML, JSon или любой другой.

0 голосов
/ 14 января 2011

Добро пожаловать в нашу библиотеку SolFS .Это виртуальная файловая система, в которой вы помещаете свои данные в файлы и используете ключ в качестве имени файла.Однако в вашем коде должна быть выполнена «истекшая» очистка файла.SolFS обеспечивает встроенное шифрование (и вы можете добавить свои собственные механизмы шифрования) и способно хранить большие файлы (несколько ГБ на файл прекрасно).Кроме того, SolFS также имеет встроенную компрессию, если вы заботитесь о размере файла.

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