我正在进行一些代码审核,并遇到了以下代码
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());
}
}