我正在將大量位圖(屏幕截圖)保存到內存中。沒有什麼特別的代碼,這是微不足道的:哪個編解碼器用於將位圖快速保存到內存
var memory = new MemoryStream();
bitmap.Save(memory, ImageFormat.Png);
由於我的電腦是有點慢,我已經運行在Visual Studio中的性能分析會話,我發現了Save()
調用需要「包容性樣本的37% 」。保存到磁盤時使用另一個大的部分,所以當不保存到磁盤時,這37%更可能是80%。 (我現在不在乎保存到磁盤,所有數據都保存在RAM中,直到按下熱鍵,我幾乎不會影響硬盤速度。)
從我的理解中,Save()
調用必須轉換或多或少將位圖的「原始」數據轉換爲壓縮的PNG文件格式。
我想知道是否有人對Save()
方法的處理時間有不同的圖像格式的性能概述。我想選擇最快的格式,即使文件大小較大。
我曾嘗試:
ImageFormat.MemoryBmp
但拋出ArgumentNullException
:
值不能爲空。參數名稱:編碼器
我發現a related question,它描述了一些圖像格式是隻讀的,這會使列表減少一點。
作爲一個粗略的經驗法則,壓縮是昂貴的。因此,將圖像保存到內存(或磁盤)的最快格式將涉及任何壓縮。可能...... –
這取決於你沒有提到的因素。如果問題是您需要在有限的時間段內儘可能快地截圖,您可以通過在RAM中累積屏幕截圖,直到完成採集並最終寫入磁盤,做得更好。如果您的磁盤相對於您的CPU非常慢,則可能需要花費時間進行壓縮以減少磁盤I/O的容量。如果你的代碼是串行和順序的,那麼可能值得使用多線程,並且有一個線程獲取圖像,另一個線程並行地將它們保存到磁盤。 –
@MarkSetchell:我已經這麼做了。 MemoryStream在RAM中,不是嗎? –