5

〜8MBのデータに変換されるギザギザの配列DataMemberがあります。byte[800][10000][1]これを使っDataContractSerializerてシリアライズすると、ファイルサイズは Binary で 120MB、Text で 300MB になります。テキストのシリアル化を見ると、base64 でエンコードされた値などを示すために、すべてのバイト値の周りにタグが付けられていることがわかります。これが、このサイズの拡大の理由である可能性があります。

DataContractSerializer(またはその点で他のシリアライザーを使用して)大きなギザギザのブロブをシリアル化する効率的な方法は何ですか

Text を使用してシリアル化した場合の XML 出力のスニペット:

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

1 に答える 1

5

BinaryFormatter他のシステムとの相互運用性を気にせず、パフォーマンスのみを気にする場合は、を使用してみてください。

byte[800][10000][1] foo = ... fetch it
BinaryFormatter formatter = new BinaryFormatter();
using (var stream = File.OpenWrite("foobar.dat"))
{
    formatter.Serialize(stream, foo);
}
于 2013-02-15T21:19:52.347 に答える