所以我有這個foreach循環這裏無法獲得.Dispose()在foreach循環工作
foreach (string file in condensedFilesList)
{
Image imgToAdd;
imgToAdd = Image.FromFile(file);
if (imgToAdd.Width < 1920 || imgToAdd.Height < 1080)
{
//neither of the commented out lines worked when placed here
//imgToAdd = null;
//imgToAdd.Dispose();
condensedFilesList.Remove(file);
}
else
{
//neither of the commented out lines worked when placed here
//imgToAdd = null;
//imgToAdd.Dispose();
continue;
}
}
它包含指向.jpg圖像文件的路徑列表。其中約80個各種大小。我需要列表來檢查每個圖像,檢查其分辨率是否爲1920 * 1080,如果不是,則從陣列中刪除該文件路徑指針。
現在它已經過了,將圖像設置爲在imgToAdd變量中查看,然後如果width屬性或height屬性不匹配,那麼該項目將被刪除。這適用於第一個條目。它的分辨率不符合法案,我的陣列將從80個降到79個。
但我無法讓我的imgToAdd變量清空,所以我可以爲它分配一個新的filePath。我一直在遇到OutOfMemoryException。我試過運行.Dispose(),將它設置爲null,並且我無法讓它實際上清空它自己的資源。
在調試器中.Dispose()會導致imgToAdd在檢查元素時有一長串錯誤代替值。它的所有屬性都在那裏,但毫無價值並被錯誤所取代。如果我將它設置爲null,它將起作用,並且在下一次迭代中,imgToAdd = null。 Buuuuut,當它試圖爲變量分配一個新的filePath時,我仍然會發生OutOfMemoryException。
所以我不知道這是怎麼回事。我希望別人能夠指出我做錯了什麼,我看不到它。
EDIT2:
我只是要覆蓋此編輯空間,如果人們想檢查我更新功能的演變,命中率高達編輯歷史。我嘗試使用推薦的@dlatikay這樣的using(){}語句,並將它寫入一個新列表。但不幸的是,我仍然遇到OutOfMemoryException。這裏的功能權限
var tempList = new List<string>();
foreach (string file in condensedFilesList)
{
using (Image imgToAdd = Image.FromFile(file))
{
if (imgToAdd.Width < 1920 || imgToAdd.Height < 1080)
{
continue;
}
else
{
tempList.Add(file);
}
}
}
condensedFilesList = tempList;
呼叫處理之前使它= null –
即.. imgToAdd。處置();那麼imgToAdd = null; –
僅供參考您無法修改您正在迭代的集合。您需要創建一個臨時集合來迭代,或者您需要執行一個'for'循環,該循環從最後開始並工作到列表的前面。 – juharr