2012-09-26 83 views
1

可能重複:
When is Dispose necessary?
.Net and Bitmap not automatically disposed by GC when there is no memory left位圖是某種系統資源嗎?

一輪的頭髮拉我終於想通了,我的罪魁禍首是重新分配的調整操作Bitmap對象後。在足夠的重新分配系統後,嘗試繪製位圖(Paint事件未被調用)並且變得非常乾燥。

在分配新位圖之前處理舊位圖會修復它。

這就是說,必須有一些潛在的資源(超出了簡單的存儲單元)的那些成爲孤兒舊位圖用完。

我以爲位圖只是內存塊,我可以離開了垃圾收集器。這是怎麼回事??

+1

的問題是:是的'IDisposable'接口參與?如果是這樣,正確的代碼*必須*調用'Dispose',因爲它說「嘿,這個實現可能或可能不需要在確保終結器運行之前及時清理一些東西」。 – 2012-09-26 05:22:46

+1

請參閱[何時需要處置](http://stackoverflow.com/questions/1209585/when-is-dispose-必要),[位圖不會自動處理](http://stackoverflow.com/questions/5838608/net-and-bitmap-not-automatically-dispose by-gc-when-there-no-memory-left),[正確使用'IDisposable'接口](http://stackoverflow.com/questions/538060 /適當的使用該idisposable接口),許多其他。 – verdesmarald

+0

@verdesmarald:我想我錯誤地搜索了這個搜索。 –

回答

4

MSDN聲明Bitmap封裝了GDI +對象。所以我希望當你不再需要它們時,你必須調用Dispose()來釋放這些系統資源。

編輯:位圖圖像是一個子類,下面的MSDN聲明適用

總是調用Dispose你釋放你的最後一個引用圖像前。否則,直到垃圾回收器調用Image對象的Finalize方法後,它所使用的資源纔會被釋放。

+0

是的。如果打開「任務管理器」並轉到「進程」選項卡(我不知道Windows 8)並啓用「GDI對象」列,則會看到在不處理「位圖」對象時會發生什麼情況。 – Dai