我已經繼承了一個網站,這是一個過大的和未壓縮的圖像困擾,所以我正在自動糾正它的任務,除了超過一定大小的文件,其中主要工作。例如,我有一個8176x6132 300dpi和24位深度的JPG圖像,文件大小爲4.49mb。ImageResizer內存不足大圖像異常
這裏是我的ImageJob
var instructions = new Instructions("width=1920;height=0;mode=max");
var resizedImg = new ImageJob(filePath, filePath, instructions).Build();
我有足夠的可用資源,我的機器上還沒有走出內存異常。正如我現在測試,我有90%的CPU免費和51%的內存。
我的機器有:
- 英特爾CoreTMi7四核處理器i7-4790(3.6GHz的),8MB緩存
- 16GB金士頓DUAL-DDR3 1600MHz的
爲什麼會失敗?當我運行ImageJob時,內存使用率在失敗之前沒有增加(據我所知)。
我使用ImageResizer 3.4.3和DiskCache插件。
我還應該注意到,我可以在Photoshop中打開問題文件,沿着長邊調整爲3000px,保存然後運行相同的ImageJob,然後完成而不會出錯。
Diagnostics page output and exception stack trace
爲什麼高度爲'0'?這可能是罪魁禍首。所以首先要看看,確保你有正確的輸入參數進入'System.Drawing.Graphics.DrawImage'調用。 –
Oops ImageResizer是第三方庫,但是它是開源的,因此您可以逐步執行代碼以確保它將合理的值傳遞給'System.Drawing'。或者,詢問他們的支持,這足夠奇怪地指向SO,它是如何遞歸的。 –
我不知道ImageResizer是用來做什麼的,但如果它是System.Drawing或WPF,你可能會考慮切換到使用ImageMagick的東西。由於圖像調整大小的內存要求,我發現產生一個圖像魔法過程可以爲您自己的過程提供一定程度的獨立於任意大圖像的危險。 – spender