Serializer の代わりに BinaryWriter を使用すると、目的の (最小の) サイズが得られます。
速度についてはわかりませんが、試してみてください。
私のシステムでは、ストリームのオープンとクローズを含めて、32MB の書き込みに 0.5 秒もかかりませんでした。
次のように、データを書き込むために独自のforループを作成する必要があります。
struct Pair
{
public double X, Y;
}
static void WritePairs(string filename, Pair[] data)
{
using (var fs = System.IO.File.Create(filename))
using (var bw = new System.IO.BinaryWriter(fs))
{
for (int i = 0; i < data.Length; i++)
{
bw.Write(data[i].X);
bw.Write(data[i].Y);
}
}
}
static void ReadPairs(string fileName, Pair[] data)
{
using (var fs = System.IO.File.OpenRead(fileName))
using (var br = new System.IO.BinaryReader(fs))
{
for (int i = 0; i < data.Length; i++)
{
data[i].X = br.ReadDouble();
data[i].Y = br.ReadDouble();
}
}
}