당신이 사용하는 경우 serializer 대신 BinaryWriter를 사용하면 원하는 크기 (mimimal)를 얻을 수 있습니다.
속도에 대해서는 잘 모르겠지만 시도해보십시오.
내 시스템에서 32MB를 기록하는 데는 스트림 열기 및 닫기를 포함하여 0.5 초 미만이 소요됩니다.
당신은 다음과 같이 데이터를 기록하기 위해 자신의
에 대한 루프를 작성해야합니다
:
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();
}
}
}
수동 직렬화가 실제로 매우 빠르고 컴팩트 될 수 있지만, 또한 오류가 발생하는 경향과 시간이 많이 소요 작성하는 것입니다. 오버 헤드가 예상되지만, BinaryFormatter를 사용하면 종종 불합리합니다. –
제네릭 및/또는 인터페이스로 좀 더 친숙하게 만들 수 있습니다. 그러나 메타를 추가하기 시작하면 포매터의 오버 헤드에 신속하게 접근하게됩니다. –
헨크 스팟. BinaryFormatter는 about * anything *과 함께 작동합니다. 당신은 당신이 필요로하는 것과 당신이 필요로하는 것만을 정확하게 무언가로하여 더 나은 성과를 기대해야합니다. –