Вы уверены, что запись байта в поток - действительно хорошая идея? Конечно, он не будет иметь идеальных характеристик производительности, и, возможно, именно это смущает алгоритм сжатия gzip.
Также может случиться, что данные, которые вы пытаетесь сжать, просто не очень хорошо сжимаются. На вашем месте я бы попробовал ваш код с текстовым документом того же размера, что и текстовые документы, как правило, сжимается намного лучше, чем произвольный двоичный файл.
Кроме того, вы можете попробовать использовать чистый DeflateStream в отличие от GZipStream, так как они оба используют один и тот же алгоритм сжатия (deflate), единственное отличие состоит в том, что gzip добавляет некоторые дополнительные данные (например, проверку ошибок), так что DeflateStream может привести к меньшему результаты.
Мой VB.NET немного заржавел, поэтому я не буду пытаться писать пример кода в VB.NET. Вместо этого, вот как вы должны сделать это в C #, это должно быть относительно просто, чтобы перевести его на VB.NET для кого-то с небольшим опытом: (или, может быть, кто-то, кто хорош в VB.NET, может отредактировать мой пост и перевести его на VB.NET)
FileStream sourceFile;
GZipStream compStream;
byte[] buffer = new byte[65536];
int bytesRead = 0;
while (bytesRead = sourceFile.Read(buffer, 0, 65536) > 0)
{
compStream.Write(buffer, 0, bytesRead);
}