Не уверен, на какой версии .NET вы работаете. В более ранних версиях он использовал размер окна, равный размеру буфера, из которого вы писали. Так что в вашем случае он будет пытаться сжать каждое целое число в отдельности. Я думаю они изменили это в .NET 4.0, но не подтвердили это.
В любом случае вам нужно создать буферный поток перед GZipStream
:
// Создание потока файлов с буфером 64 КБ
FileStream fs = new FileStream (имя файла, FileMode.Create, FileAccess.Write, FileShare.None, 65536);
GZipStream cmp = new GZipStream (fs, CompressionMode.Compress);
...
GZipStream cmp = new GZipStream(File.Open(cacheFileName, FileMode.Create), CompressionMode.Compress);
BufferedStream buffStrm = new BufferedStream(cmp, 65536);
BinaryWriter fs = new BinaryWriter(buffStrm);
Таким образом, GZipStream
получает данные в виде кусков по 64 Кбайта и может гораздо лучше выполнять сжатие.
Буферы размером более 64 КБ не дадут вам лучшего сжатия.