作爲一種優化,我決定將一個我經常需要的對象 - 一個SDL表面與全局級的預渲染圖像(稱爲S_AreaBMP) - 放在全局範圍內。
現在,它不必在每個畫面的DrawScreen函數中創建和銷燬。我只需要配置和更改它,當一個新的水平或GFX片裝,這是我通過這個功能做的事:VB/C#:在全球範圍內放置可處理對象:這樣好嗎?
Public Sub PrepareAreaImage()
''#dispose old image before it becomes unreferenced
If AreaBMPExists
S_AreaBMP.Dispose()
End If
AreaBMPExists = True
''#declare an appropriately sized bitmap w/ a GDI Graphics object
Dim AreaBMP As Bitmap = New Bitmap(Area.W * TLDIM, Area.H * TLDIM)
Dim AreaGrph As Graphics = Graphics.FromImage(AreaBMP)
''#...(omitted: iterate through Area and draw each tile to AreaBMP)
''#Store to the SDL surface
S_AreaBMP = New SdlDotNet.Graphics.Surface(AreaBMP)
''#Dispose
AreaBMP.Dispose()
AreaGrph.Dispose()
End Sub
(AreaBMPExists和S_AreaBMP是全球範圍)
問:這是基本健全?
它工作正常,但我不禁覺得這種事情是不鼓勵......
您爲什麼認爲Dispose是一項成本高昂的操作? Dispose正在做一些清理,但並不一定是昂貴的。無法看到每幀一次新配置/配置如何以任何方式影響性能。特別是在避免它弄亂代碼時。 – adrianm 2009-09-03 20:29:48
糟糕,我被混淆了。我回頭看看給了我印象的頁面,它有一個昂貴的Finalize方法,而不是Dispose。我會適當地解決這個問題。 – 2009-09-03 20:47:23