-1

多くのビットマップを生成する別のプロセスがあり (最終的にはビデオをシミュレートします)、C# アプリに表示したいと考えています。

メモリ マップ ファイルでビットマップを配信するのが最速の方法だと思いました。次のコードを実行したところ、ビットマップをディスクから直接構築する方が高速であることがわかりました。

    int length = 153718;
    var mmf1 = MemoryMappedFile.CreateFromFile(@"C:\tests\test.bmp",
                                               FileMode.OpenOrCreate,
                                               null);
    var reader = mmf1.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
    byte[] buffer = new byte[length];
    MemoryStream memstream = new MemoryStream(buffer);

    Stopwatch stopwatch = new Stopwatch();

    stopwatch.Start();

    reader.ReadArray<byte>(0, buffer, 0, length);
    Bitmap bmp = new Bitmap(memstream);

    stopwatch.Stop();
    Console.WriteLine("Time elapsed: {0}",
        stopwatch.Elapsed);

    stopwatch.Reset();
    stopwatch.Start();

    Bitmap bmp2 = new Bitmap(@"C:\tests\test2.bmp");

    stopwatch.Stop();
    Console.WriteLine("Time elapsed: {0}",
        stopwatch.Elapsed);

結果は次のとおりです。

経過時間: 00:00:00.0074231
経過時間: 00:00:00.0023245

実行される繰り返しコードのみを計測しました (セットアップは含まれません)
両方のビットマップは同じイメージで、640*480 bmp というかなり小さいサイズです。

それはどのように可能ですか?より効率的なメモリ マップ方法はありますか?

4

1 に答える 1