2

ushort[,,]おそらく大きな、byte[,,]またはdouble[,,]配列をすばやく保存/ロードする必要があります。

私は単に配列要素を要素ごとにスキャンして、単純なアプローチを試みましたFileStream fs:

for (p = 0; p < Planes; p++)
{
    for (y = 0; y < Height; y++)
    {
        for (x = 0; x < Width; x++)
        {
            fs.Write(BitConverter.GetBytes(array1[p, y, x]), 0, 8);
        }
    }
}

このループを に置き換えました。これによりBinaryFormatter、パフォーマンスが向上します。

bf.Serialize(fs, array1);

3 x 1024 x 768 の double の配列を保存してから 10 回ロードする小さなベンチマークを実行し、次の結果を得ました。

単純なアプローチ: 10 628 ミリ秒

BinaryFormatter アプローチ: 8 722 ミリ秒

より速い方法はありますか?ポインタを使用していますか?配列を1次元にシリアライズしてからファイルにフラッシュしますか?

提案をありがとう。

4

2 に答える 2

0

いくつかの実験の後、BinaryFormatterwithFileStreamが私が見つけた最速の解決策です。

速度を改善せずに、次の代替案をテストしました。

  • に書き込みMemoryStream、次にコピーしますFileStream
  • 包み込むFileStream_BufferedFileStream
  • BinaryWriterの代わりに単純なループで使用しますBinaryFormatter
于 2013-07-15T07:50:22.987 に答える
0

を使用MemoryStreamしてデータを書き込み、copyTo次にFileStream

ms.copyTo(fs)

ハードドライブでIO操作を高速化します

于 2013-07-15T05:25:11.993 に答える