循環大量圖片的時候會報出GDI+內存不足的問題,這個問題困擾了我很久,下面是我的幾個解決方案:
- 使用using(){}代碼塊來定義需要釋放內存的變量。using代碼塊會在代碼結束的時候釋放變量,但是並不能徹底解決。
- 使用GC.Collect()啟動.NET自身的內存回收。但是這里注意,不要所有循環完畢了之后再回收,這樣起不到任何效果,要每次循環結尾的時候回收。但是這個仍然不能徹底的解決問題。
- 這是最關鍵的一步!Thread.Sleep(500)。是的,沒錯,進程暫停一小段時間。這個可以徹底解決內存不足的問題。
好了,這里要說一下為什么進程暫停可以徹底解決這個問題。因為內存釋放並是單獨的代碼,即內存釋放和程序代碼是同時執行的,也就是異步的。這里需要等待徹底釋放之后,再運行其它的代碼,所以要暫停一下進程。