2013-02-15 53 views
5

我有一個鋸齒狀數組DataMember,它返回byte[800][10000][1],它轉換爲〜8MB的數據。當使用DataContractSerializer進行序列化時,它會變成文件大小爲120MB的二進制文件和300MB的文本文件。看看文本序列化,它表明它在每個字節值周圍放置一個標籤,以表明它的base64編碼值等等,這可能是這種尺寸擴大的原因。有效地序列化鋸齒狀字節數組

使用文本序列化時,什麼是有效的方式來序列使用DataContractSerializer

段XML輸出較大的鋸齒狀BLOB(或任何其他串行器爲此事):

<a:ArrayOfbase64Binary><a:base64Binary>CQ==</a:base64Binary><a:base64Binary>Bw==</a:base64Binary><a:base64Binary>BQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AQ==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>BA==</a:base64Binary><a:base64Binary>Bg==</a:base64Binary><a:base64Binary>CA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary><a:base64Binary>AA==</a:base64Binary> 

回答

5

你可以嘗試使用BinaryFormatter如果你不關心與其他系統的互操作性,但只關於性能:

byte[800][10000][1] foo = ... fetch it 
BinaryFormatter formatter = new BinaryFormatter(); 
using (var stream = File.OpenWrite("foobar.dat")) 
{ 
    formatter.Serialize(stream, foo); 
} 
+0

我試過了。如果這樣的話,它只有10MB。 – LadderLogic 2013-02-15 21:39:14