何百万ものフロートを取り、データベースに 5,000 個のバッチでバイナリとして格納するタスクがあります。これにより、シリアライゼーションのパフォーマンスについて興味深いことを学ばざるを得なくなりました。
驚いたことの 1 つは、シリアライズされたデータのサイズです。これは、予想を 10 倍上回っています。このテストでは、4 バイトの float が 55 バイトにシリアル化され、8 バイトの double が 59 バイトにシリアル化されていることがわかります。
ここで何が起きてるの?float 値を単純に 4 バイトに分割するだけだと思っていました。残りの 51 バイトは何ですか?
private void SerializeFloat()
{
Random rnd = new Random();
IFormatter iFormatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream(10000000))
{
memoryStream.Capacity = 0;
iFormatter.Serialize(memoryStream, (Single)rnd.NextDouble());
iFormatter.Serialize(memoryStream, rnd.NextDouble());
}
}