Сжатие потока отличается от сжатия файла. При сжатии файла, как правило, можно сделать несколько проходов по всему файлу и определить, какую схему сжатия использовать, прежде чем выполнять коммит. При сжатии потока часто необходимо начинать вывод данных до того, как процедура сжатия обработает достаточно данных, чтобы знать, какой метод сжатия будет оптимальным.
Этот эффект может быть несколько смягчен путем разделения данных на блоки, принятия решения для каждого блока, как представлять данные, и включения заголовка в начале каждого блока, идентифицирующего, как они хранятся. К сожалению, дополнительные заголовки блоков увеличат размер результирующего потока. Кроме того, многие схемы сжатия повышают эффективность, поскольку они обрабатывают поток; вполне может случиться так, что каждый 1k-блок в файле будет расширяться, если «сжиматься» по отдельности, даже если сжатие всего файла приведет к значительной экономии пространства (поскольку компрессор может, например, создать словарь общих байтовых последовательностей). Можно было бы спроектировать пару «сжатие / распаковка» так, чтобы блок данных, который расширился, был бы дословно записан компрессором (с байтом заголовка, указывающего, что это было), и имел бы процесс uncompresser, который блокирует таким же образом Компрессор мог бы сделать так, чтобы добавить в словарь те же последовательности байтов, которые были бы добавлены, если бы блок хранился в «сжатой» форме. Такой подход, вероятно, был бы хорошим, хотя он значительно увеличил бы сложность некомпрессора.
Я подозреваю, что самая большая проблема для DeflateStream, однако, заключается в том, что не может быть никакого способа улучшить производительность "сжатия" в худшем случае без создания сжатых данных, которые несовместимы с существующим "несжатым" кодом. Предположим, что у вас есть строка байтов Q, и вам нужна последовательность байтов, которая при подаче в «несжатый» код, поставляемый с .net 2.0, даст ту же последовательность. Вполне возможно, что для некоторых возможных значений Q нет таких входных последовательностей, которые не намного больше, чем Q. Если это так, Microsoft никак не может «исправить» проблему без машины времени.