Как вы сжимаете объекты, хранящиеся в сессии / кэше? - PullRequest
2 голосов
/ 24 октября 2008

Скотт Хансельман недавно опубликовал статью в блоге , описывающую, как сжимать строки, хранящиеся в сеансе / кэше. Это выглядит довольно многообещающе, но большинство данных, которые я храню в сеансе / кэше, это не строки, а пользовательские классы. Как бы вы пошли об их сжатии?

Сначала я подумал о том, чтобы сначала использовать BinaryFormatter для сериализации объекта (как это обычно делает ASP.NET при хранении объектов пользовательских классов в сеансе / кэше), а затем сжимать результирующий байтовый массив. Однако это имеет неблагоприятный побочный эффект, заключающийся в том, что извлеченные данные из сеанса / кэша будут доступны только для чтения (поскольку распаковка и десериализация создаст новый объект в памяти).

Другими словами, если мой код в настоящее время выглядит следующим образом, есть ли способ сжать его хранилище в сеанс?

MyClass foo = new MyClass();
Session["foo"] = foo;

MyClass retrievedFoo1 = (MyClass) Session["foo"];
retrievedFoo1.Property1 = "property 1";

// retrievedFoo2.Property1 should equal "property 1"!
MyClass retrievedFoo2 = (MyClass) Session["foo"];

Ответы [ 3 ]

1 голос
/ 25 октября 2008

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

Вам не хватает памяти, и если да, то какие объекты потребляют больше всего? Это должно указать вам, как улучшить код, чтобы уменьшить объем используемой памяти.

Если ваше приложение оптимизировано наилучшим образом с нужными ему объектами, вы можете захотеть использовать нехватку памяти, такую ​​как база данных или файловая система, для кэширования более крупных объектов (где сериализация пригодится). 1005 *

Вы также можете разместить сеансы InProc на другом сервере, чем веб-сервер, чтобы улучшить масштабируемость и распределить сайт по веб-ферме.

0 голосов
/ 25 октября 2008

Насколько я понимаю, снижение производительности (перегрузка) сеанса происходит из-за издержек сериализации / десериализации, а не из-за размера хранилища. Если вы смотрите на сжатие, чтобы помочь с проблемами производительности, я думаю, вы идете по неверному пути. (Де) Сжатие просто добавит больше накладных расходов.

Теперь, если вы говорите о кеше, то все немного по-другому. Но вы конкретно упоминаете сессию ...


Я смущен твоим вопросом, прочитав твой комментарий к статье Скотта. Кажется, вы не совсем понимаете, что вы получаете постоянство данных, помещая что-то в Session / Cache так же, как если бы вы помещали это в базу данных или записывали в файл. Сжатие не решит то, о чем вы спрашиваете.

0 голосов
/ 24 октября 2008

Не могли бы вы использовать XML Serializer для преобразования его в формат XML?

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