Скотт Хансельман недавно опубликовал статью в блоге , описывающую, как сжимать строки, хранящиеся в сеансе / кэше. Это выглядит довольно многообещающе, но большинство данных, которые я храню в сеансе / кэше, это не строки, а пользовательские классы. Как бы вы пошли об их сжатии?
Сначала я подумал о том, чтобы сначала использовать 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"];