2015-06-16 75 views
1

我編寫了一些代碼來使用ImageResizer調整大量圖像的大小。ImageResizer控制檯應用程序內存不足錯誤

foreach(DataRow item in dst.Tables[0].Rows) 
{ 
    string dir = @"C:\Media\ImageCollection\" + item[image]; 

    string outputDir = @"D:\ImageExport\" + item[filename].ToString().SubString(0, 5); 

    if (!Directory.Exists(outputDir)) 
      Directory.CreateDirectory(outputDir); 

    if (Convert.ToInt32(item["width"]) > Convert.ToInt32(item["height"])) 
      ImageResizer.ImageBuilder.Current.Build(dir, outputDir + @"\" + item["image"] + ".jpg", new ImageResizer.ResizeSettings("?maxwidth=500&format=jpg&quality=96"), true); 
    else 
      ImageResizer.ImageBuilder.Current.Build(dir, outputDir + @"\" + item["image"] + ".jpg", new ImageResizer.ResizeSettings("?maxheight=500&format=jpg&quality=96"), true); 
} 

代碼隨機拋出異常內存在System.Drawning.Image在ImageResizer.ImageBuilder通話之一。

我想知道如果我在AppConfig文件中丟失了某些東西。

<configSections> 
    <section name="resizer" type="ImageResizer.ResizerSection,ImageResizer" requirePermission="false" /> 
</configSections> 

<resizer> 
    <plugins> 
      <remove name="SizeLimiting" /> 
      <add name="PdfRenderer" downloadNativeDependencies="false" /> 
    </plugins> 
</resizer> 

任何想法這裏發生了什麼?

回答

1

根據您發佈的代碼,您嘗試使用目錄路徑(@「C:\ Media \ ImageCollection」)作爲輸入圖像的文件名。 ImageResizer一次處理1張圖像;您需要提供輸入圖像文件名。

OutOfMemoryException是每當出現問題時由Microsoft API拋出的一般錯誤消息;它並不總是意味着沒有可用的內存。

+0

我改變了一下代碼,我將輸入圖像傳遞給ImageResizer構建調用,在處理隨機數量的圖像後總是發生錯誤。 – DaNet

+0

嘗試每次迭代調用GC.Collect()和Thread.Sleep(10)。有可能你很快分割內存空間,分配開始失敗。 –

+0

看來服務器使用的資源太多,重新啓動是我需要做的。我會添加你的建議,這應該不會再發生這種錯誤。 – DaNet