我正在通过网络服务向移动设备传输消息。数据是一个xml字符串,我使用GZipStream进行压缩,然后使用Base64进行编码。 我在模拟器中获得了内存异常并希望优化进程,因此我已经停止按值传递字符串并删除了字节数组的不必要副本。 现在我想知道Base64编码。它增加了消息的大小,处理和内存要求。这是绝对必要的吗?
编辑:这是我如何解压缩:
public static byte[] ConvertMessageStringToByteArray(ref string isXml)
{
return fDecompress(Convert.FromBase64String(isXml));
}
public static byte[] fDecompress(byte[] ivBytes)
{
const int INT_BufferSize = 2048;
using (MemoryStream lvMSIn = new MemoryStream(ivBytes))
using (GZipInputStream lvZipStream = new GZipInputStream(lvMSIn, ivBytes.Length))
using (MemoryStream lvMSOut = new MemoryStream())
{
byte[] lvBuffer = new byte[INT_BufferSize];
int liSize;
while (true)
{
liSize = lvZipStream.Read(lvBuffer, 0, INT_BufferSize);
if (liSize <= 0)
break;
lvMSOut.Write(lvBuffer, 0, liSize);
}
return lvMSOut.ToArray();
}
}
答案 0 :(得分:1)
gzip(位于GZipStream中)生成二进制数据 - 它们不适合7位文本消息(SOAP是文本消息),除非你对它们执行类似base64编码的操作。
也许解决方案是不是gzip / encode(decode / ungzip)整个缓冲区,而是使用流 - 将gzipping流连接到编码流并从后者的输出中读取结果(或连接解码流到unngzipping流)。这样你就有机会消耗更少的内存。