2013-02-15 7 views
5

DataMemberというギザギザの配列があり、それは〜8MBのデータに変換するbyte[800][10000][1]を返します。 DataContractSerializerを使用してシリアル化すると、バイナリの場合は120MB、テキストの場合は300MBになります。テキストのシリアライゼーションを見ると、すべてのバイト値の周りにタグが置かれ、このサイズの拡大の理由である可能性があるbase64でエンコードされた値などを示すことを示します。あなたが使用して試みることができるギザギザのバイト配列を効率的にシリアライズ

<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

:テキストを使用して直列化するときDataContractSerializerを使用して、大きなギザギザのブロブ(またはそのことについては、他のシリアライザ)

スニペットXML出力をシリアル化するための効率的な方法です何

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

関連する問題