2012-05-17 81 views
0

我在Windows窗體中創建一個小遊戲,並使用屬性backgroudimage。 我創建新的位圖並將其提供給窗體。 問題是,程序使用了太多的內存 - 每次它執行製作新位圖的過程時,它都會增加更多的2k! 過了一段時間,我猜垃圾收集器全部刪除它們(內存下降一次),但它可以達到800k,這對我的小遊戲來說是荒謬的。 我沒有任何引用到位圖後,我把它放到窗體屬性,甚至當我把位圖爲null的問題沒有解決。 我能做些什麼來解決內存問題?謝謝!設置新的人之前更改表格Backgroundimage需要太多內存

+0

正如一個音符,.NET並沒有看到有任何的內存問題,因此它贏得了」清除它。如果您使用應用程序重載Windows,它將會關閉。但是不要用「太多」的記憶來嚇倒它。它將在必要時清理它。 「不成熟的優化是萬惡的根源」 –

+0

把你說得對,下次我會照你說的去做。 – liran63

回答

2

獲取到以前的圖像的引用,這樣就可以處理它:

Image oldImage = this.BackgroundImage; 
this.BackgroundImage = newImage; 
oldImage.Dispose(); 
+0

我真的不知道爲什麼,但它對內存沒有影響(函數Dispose())。 – liran63

+0

@ liran63:如果您創建新圖像,內存使用量增加是正常的。垃圾收集器只會在需要時進行清理或者有空閒時間使用。 Dispose'調用本身並不釋放任何內存,但它使得清理變得更容易,因爲對象不必進行最終處理。 – Guffa

+0

是的,多數民衆贊成 - 處置就像'我已經清理了我需要的一切,所以不要整理我的非託管資源'。這是因爲Dispose通常會調用GC.SuppressFinalize(this),這意味着它不需要做任何額外的工作來整理東西。你救了它的麻煩 –