我需要在短時間內處理很多位圖,並使用線程執行此操作。 現在,我記得關於處理所有這些,我沒有內存泄漏。通常我的應用程序打開幾個線程(我控制它們的數量 - 現在我只能同時執行4個),並且每個處理一個大的位圖並執行一些額外的圖形處理。如何在創建多個位圖時防止內存問題?
一切工作正常,直到我處理讓我說 - 高達100位圖連續。我的應用程序使用opendialog,所以我打開100個第一個位圖,然後我的應用程序自動處理它們。完成後,我打開下一批100個位圖,等等(因此在這些批次之間存在顯着的暫停)。這工作正常。應用程序一直開放。我看到沒有內存泄漏,處理完最後一批後,它保持穩定,我可以處理更多。
當我在單個批次中選擇更多位圖時出現問題 - 超過300個,因此我的應用程序在沒有暫停的情況下處理所有這些位圖。最後,我得到了GDI +內存不足錯誤,我的應用程序掛起了1.7 GB的內存消耗。
我的猜測是系統無法在如此短的時間內釋放內存(並且我的應用程序正在預留更多內存)。可能嗎?如何處理這個?我不想在過程中添加一個愚蠢的延遲。我想管理它。
更新:原因很簡單,該應用程序被錯誤地編譯爲32位,所以只有〜2GB的可用內存。雖然GC需要時間釋放內存,而應用程序仍在爲更多位圖保留更多內容,但應用程序已達到極限並掛起。
我編譯的應用程序爲64位,它的工作完美無瑕。另外我會控制內存的使用,所以它不像現在這樣無人值守。感謝您提出的所有提示和有趣的觀點!
這是很難告訴一些關於它沒有任何代碼,看看你是如何處理圖像.. – 2013-03-19 09:47:57
閱讀本文http://stackoverflow.com/questions/233596/best-practice-for-forcing-garbage- collection-in-c-sharp ...你需要的可能是使用強制垃圾收集來清理... – 2013-03-19 09:48:19
你並行處理了多少位圖? (即你開始多少個任務或線程?)。注:你不*需要強制垃圾回收 - 如果.Net內存不足,它會自動執行。自己去做並不會有任何幫助。 – 2013-03-19 10:29:41