![](/img/trans.png)
[英]How and where should i dispose the old image ? And to what size to set the image in the pictureBox as minimum and maximum?
[英]If I replace an image in a PictureBox control, should I dispose the original image first? .Net Winforms
根據我的問題 ,如果我替換圖片框中的圖像,我應該首先處理原始圖像嗎?
或者,這種情況怎么樣:
Dim bm As New Bitmap(32,32)
bm = New Bitmap(32,32)
bm = New Bitmap(32,32)
bm = New Bitmap(32,32)
bm
只需要在最后處置,還是應該在每次重新創建之前處理?
謝謝大家的答案。 在我身上有一個很大的疏忽。 我知道一個控制部門負責處理它的孩子,但我沒有想到如果我更換它,我應該處理一個舊圖像。
是的,您應該在同一變量之上創建新圖像之前處置舊對象。 通過使用相同變量創建新圖像,您將刪除對它的引用。 如果沒有對舊對象的引用,則表示它應該由GC(垃圾收集器)拾取。 雖然從技術上講,這“應該”最終導致內存被釋放,假設終結器確保非托管資源得到處理,這是一個很大的假設(你甚至不能假設將調用終結器) ,它會為系統帶來更多的工作。 非默認終結器會在垃圾收集級別提升方面為GC帶來額外的工作,從而導致需要更長時間才能釋放內存,以及GC必須運行的次數。
這是假設所有寫入都是為了確保終結器處理它。 只要一個對象有一個Dispose方法(實現BitMap所做的IDisposable的任何東西),就應該在刪除對象的引用之前調用它(超出范圍,刪除對象的引用等)。
這是一篇關於垃圾收集器如何在.net中工作的文章
http://www.devx.com/dotnet/Article/33167
以下是MS如何實施dispose / finalizer:
當更改與PictureBox
關聯的圖像時,應該在當時的圖像上調用Dispose
,並且僅當沒有其他任何內容將使用該圖像時。 為了知道這一點,人們必須知道舊圖像的來源。 在某些情況下,創建圖像只是為了分配給PictureBox
。 在其他情況下,圖像可以是旨在共享和/或重用的圖像。 如果僅為了分配給PictureBox
而創建圖像,則應該在Dispose
PictureBox
或給出另一個圖像時將其設置為Dispose
d。 如果圖像應該被共享或重用,則這些條件不得導致它被丟棄。
一般來說,解決此類問題的正確方法是,具有IDisposable
屬性的類(如PictureBox
,帶有Image
)使用顯式SetImage
方法而不是具有可變Image
屬性,並且SetImage
方法包含一個參數,指示是否PictureBox
應負責處理它。 當且僅當前一個SetImage
調用給它負責時,在PictureBox
上調用SetImage
或Dispose
應該在保持的圖像上調用Dispose
。 不幸的是, PictureBox
不能這樣工作,但我強烈建議將其用作您編寫的包含IDisposable
對象的未來類的模式。
是的你應該。 它實現了IDisposable。
根據一般經驗法則,處置實現IDisposable的所有對象。 不要把它留給GC。
bm只需要在最后處置,還是應該在每次重新創建之前處理?
它應該在每次“娛樂”之前處理。 不要將對象與對象引用混淆。 “new Bitmap”創建一個新對象。 “bm”是恰好指向該對象的引用。 他們不一樣。 您不是在這里“重新創建”任何對象 - 您正在創建一個新對象,然后刪除對前一個對象的所有引用,這意味着我將在(近)未來的某個時間進行垃圾回收。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.