我有一个不同的过程会生成很多位图(最终它会模拟视频),我希望它显示在 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。
这怎么可能?有没有更有效的内存映射方式?