Сжатие данных Entity Framework - PullRequest
1 голос
/ 03 февраля 2012

У меня есть служба WCF Windows, которая предоставляет данные более 250 КПК через сжатые наборы данных, и я хотела перестроить и службу, и мобильное приложение для использования моделей Entity Framework 4.x.

Чтобы обеспечить приемлемую производительность при отправке / получении данных на КПК, мне нужно сохранить как можно меньший размер данных, и мне было интересно, возможно ли сжимать IEnumerable из службы Windows WCF?

Из предыдущего опыта с наборами данных я получил степень сжатия +/- 80%, и даже распаковка данных на КПК достигла общего увеличения производительности на 50%, поэтому критически важно сохранить аналогичные уровни производительности.

EDIT: Могу ли я использовать двоичный сериализатор, а затем сжать поток? Как показано здесь

1 Ответ

6 голосов
/ 03 февраля 2012

Если вы не можете использовать встроенные возможности IIS GZip, то вы всегда можете сделать это вручную, например,

public static byte[] Compress(this IEnumerable<T> list)
{
    using (var stream = new MemoryStream())
    {
        using (var zip = new GZipStream(stream, CompressionMode.Compress, true))
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(zip, list);
        }
        return stream.ToArray();
    } 
}

Тогда просто попросите ваш метод WCF вернуть байтовый массив, который затем можно распаковать и десериализоватьна стороне клиента.

Приведенный выше код является методом расширения, поэтому вы можете просто вызвать return myList.Compress().

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