Сжатие / декомпрессия для DataSet или любого объекта .Net - PullRequest
0 голосов
/ 16 февраля 2011

Я разрабатываю приложение WPF, в котором хочу зашифровать и сжать тяжелый набор данных или объекты (<2 МБ) и отправить его по сети. Другая сторона будет распаковывать и дешифровать данные и использовать их. Этот процесс будет проходить с обеих сторон от сервера (WCF) к клиенту и от клиента к серверу. </p>

  1. Мне нужен эффективный класс сжатия (хотелось бы придерживаться классов сжатия .Net).
  2. Занимает меньше времени на сжатие и распаковку.
  3. коэффициент сжатия высокий, а поиск данных должен составлять 100%.

Может кто-нибудь посоветовать мне классы сжатия (DeflateStream / GzipStream).

Спасибо
VJ

1 Ответ

1 голос
/ 24 декабря 2011

Большинство людей путают «сжатый конечный размер» == «лучшая производительность сети». В общем смысле использование алгоритмов сжатия класса «лучше, чем дефляция» может уменьшить полосу пропускания передачи, но может увеличить общее время передачи (сжатие + передача + декомпрессия). В этом смысле компрессор класса LZ кажется лучшим. Самая быстрая реализация может быть QuickLZ или LZ4 . У них обоих есть версия C #. Но их реализация не совсем так, как, например, DeflateStream (на самом деле проще в использовании). QuickLZ все шире используется в сетевых приложениях, в то время как LZ4 в последнее время пропатчен в магистраль Apache Hadoop вместо Google Snappy.

Если вам нужно больше сжатия, вы можете получить LZMA SDK , который состоит из управляемых методов сжатия / распаковки LZMA. Но, должен вас предупредить, потребление памяти LZMA обычно очень высокое (зависит от параметров). Таким образом, порождение нескольких потоков на основе LZMA вряд ли вам действительно нужно.

Если вам все еще нужно все больше и больше сжатия, взгляните на алгоритмы класса PPM или побитового CM. PPM очень хорош для текстовых данных и имеет среднюю скорость (обычно 2-3 МБ / с). С другой стороны, CM очень хорош для двоичных данных. Их потребление памяти может быть высоким (зависит от параметров) и очень медленным (от 1 МБ / с до нескольких байт / с, зависит от алгоритмов). К сожалению, вы можете найти только реализацию PPM .NET в Интернете. Но CM очень сложно найти в .NET из-за высокой сложности. Я написал order0 битовый кодер в .NET, который может быть расширен до нужного CM с дополнительными моделями, если вам действительно нужно.

...