2013-02-15 20 views
5

Ho una matrice seghettata DataMember che restituisce byte[800][10000][1] che si traduce in ~ 8 MB di dati. Quando serializzato usando DataContractSerializer si trasforma in una dimensione del file 120 MB per binario e 300 MB per testo. Osservando la serializzazione del testo, indica che inserisce un tag attorno a ogni valore di byte per indicare che è un valore codificato base64 ecc., Che potrebbe essere il motivo dell'ampliamento di questa dimensione.Serializzare un array di byte frastagliato in modo efficiente

Qual è un modo efficace per serializzare un grande blob frastagliato utilizzando DataContractSerializer (o qualsiasi altro serializzatore per questo)

frammento di output XML quando serializzato utilizzando il testo:

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

risposta

5

Si potrebbe provare a utilizzare un BinaryFormatter se non ti interessa l'interoperabilità con altri sistemi ma solo le prestazioni:

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

Ho provato quello. Era più piccolo di 10 MB se quello. – LadderLogic

Problemi correlati