作为一种优化,我决定将一个我经常需要的对象 - 一个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