2013-02-15 14 views
5

Mam poszarpaną tablicę DataMember, która zwraca byte[800][10000][1], co przekłada się na ~ 8 MB danych. Po serializacji przy użyciu DataContractSerializer zmienia się w plik o rozmiarze 120 MB dla Binary i 300 MB dla tekstu. Patrząc na serializację tekstu, wskazuje on, że umieszcza znacznik wokół każdej wartości bajtu, aby wskazać, że jest to wartość zakodowana w base64 itd., Która może być przyczyną tego powiększenia rozmiaru.Serializowanie poszarpanej tablicy bajtów wydajnie

Jaki jest skuteczny sposób do serializacji dużą poszarpaną blob korzystając DataContractSerializer (lub innego serializatora dla tej sprawy)

urywek wyjście XML gdy szeregowane za pomocą Tekst:

<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> 

Odpowiedz

5

Można spróbować przy użyciu BinaryFormatter jeśli nie zależy Ci na współdziałaniu z innymi systemami, ale tylko na wydajności:

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

Próbowałem tego. W tym przypadku było o 10 MB mniejsze. – LadderLogic

Powiązane problemy