为什么GZIP的代码流占用的内存比同等代码多?

时间:2016-10-20 20:14:29

标签: c# gzip

我正在进行一些代码审核,并遇到了以下代码

private static string ZipStream(string sxml)
    {
        byte[] binaryData;
        var bytes = Encoding.UTF8.GetBytes(sxml);
        int x = sxml.Length;
        using (var msi = new MemoryStream(bytes))
        {
            using (var mso = new MemoryStream())
            {
                using (var gs = new GZipStream(mso, CompressionMode.Compress))
                {
                    byte[] bytes2 = new byte[600000];
                    int count;
                    while ((count = msi.Read(bytes2, 0, bytes.Length + 1000)) != 0)
                    {
                        gs.Write(bytes2, 0, count);
                    }
                }
                binaryData = mso.ToArray();
                return Convert.ToBase64String(binaryData);
            }
        }

    }

我发现在一次阅读中很难理解上面的代码,并且发现如果输入字符串超过600000字节,则上面的代码会抛出错误。所以我将其更新为以下代码。当我在一个长度为20个字符的字符串中循环控制器ap中的两段代码时,第一个版本占用2.4MB内存,第二个版本(我的更新代码)占用6.5MB内存。对于我的生活,我似乎无法理解为什么会发生这种情况?

    private static string ZipStreamUpdated(string sxml)
    {
        var bytes = Encoding.UTF8.GetBytes(sxml);
        using (var mso = new MemoryStream(bytes.Length))
        {
            using (var gs = new GZipStream(mso, CompressionMode.Compress))
            {
                gs.Write(bytes, 0, bytes.Length);
            }
            return Convert.ToBase64String(mso.ToArray());
        }
    }

0 个答案:

没有答案