0
我正在通过Web服务将消息传输到移动设备。数据是一个xml字符串,我使用GZipStream进行压缩,然后使用Base64进行编码。 我在模拟器中发现了内存异常,并希望优化进程,因此我停止了按值传递字符串并删除了字节数组的不必要副本。 现在我想知道Base64编码。它增加了消息的大小,处理和内存要求。这是绝对必要的吗?我需要在我的Web服务中使用Base 64进行编码吗?
编辑:这是我怎样解压缩:
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();
}
}
你告诉我们。为什么你压缩和编码而不是直接传递XML? – skaffman 2009-11-03 09:51:18
我认为压缩消息以节省带宽是有意义的。然而,如果你看看代码,我最终会在内存中得到大量的消息副本: 作为一个字符串两次(因为Convert.FromBase64String调用), ss未经压缩的MemoryStream和经过压缩的MemoryStream。所以我想我可能会抛弃字符串,并从Web服务调用中获取一个byte [],但我想知道是否可以抛弃Base64编码。你是否建议我不要压缩?这肯定是最简单的.......... – Colin 2009-11-03 12:15:59