-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。
這怎麼可能?是否有更高效的內存映射方式?
您第一次閱讀該文件會將其頁面放入文件系統緩存中。第二次讀取只需要從緩存中讀取。 – Mat 2013-05-05 12:04:05
我在一個循環(1000次)中嘗試過它 - 仍然是第一個慢了〜3倍 – Boaz 2013-05-05 12:06:45
_I認爲在內存映射文件中傳遞位圖是最快的方法._爲什麼/您是否認爲這樣? MMF有時對隨機訪問更好,但對於順序訪問,簡單文件可能更好。 – 2013-05-05 12:08:54