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