首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

GDI+ 進階議題:效能優化(三)——Image.FromStream 參數對讀取速度的影響

     編輯:關於.NET

4. 為何讀圖這麼慢?

Image.FromStream 七個多載,常用參數:useEmbeddedColorManagement (ICM) 與 validateImageData (驗證)。實測 8000×7000 TIFF (100MB+):

效能測試代碼

var sw = Stopwatch.StartNew();
FileStream fs = new FileStream(image, FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(fs, true, true);  // ICM=true, Validate=true
Console.WriteLine($"ICM:true Validate:true Ticks:{sw.ElapsedTicks}");
fs.Close();

// ... 分別測試四種組合 ...
// ICM:false Validate:true
// ICM:true Validate:false
// ICM:false Validate:false

測試結果

Use ICM: True. Validate: True, ElapsedTicks: 51853544
Use ICM: False. Validate: True, ElapsedTicks: 52507953
Use ICM: True. Validate: False, ElapsedTicks: 6880
Use ICM: False. Validate: False, ElapsedTicks: 5187

結論

  • Validate 為效能殺手: 驗證影像格式合法性耗時極大(~5000 萬 ticks vs ~5000 ticks)。
  • ICM 影響較小: 色彩管理資訊處理次之。
  • 建議: 確信影像來源可靠(如自行產生縮略圖批次)時,使用 Image.FromStream(stream, false, false) 關閉兩者,速度提升 10,000 倍。

補充知識

  • ICM (Image Color Management): 不同裝置色彩空間不同,ICM 確保色彩一致性。JPEG 等格式可內嵌 ICM 設定檔。權威資訊見 color.org。
  • 歷史背景: .NET 1.1 時代無 validateImageData 參數,讀圖慢被罵慘。Justin Rogers 曾寫 ImageFast 類繞過驗證。.NET 2.0 新增此參數才徹底解決。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved