代码之家  ›  专栏  ›  技术社区  ›  Exp HP

VB/C#:在全局范围内放置可处置对象:这样可以吗?

  •  1
  • Exp HP  · 技术社区  · 17 年前

    作为一种优化,我决定在全局范围内放置一个我经常需要的对象——一个SDL曲面,带有整个级别的预渲染图像(称为S_AreaBMP)。
    现在它不必在每一帧的DrawScreen函数中创建和销毁。我只需要在加载新关卡或GFX表时处理和更改它,我通过以下功能执行此操作:

    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是全局范围)

    问题:

    它工作得很好,但我忍不住觉得这种事情是令人沮丧的。。。

    2 回复  |  直到 17 年前
        1
  •  1
  •   Reed Copsey    17 年前

    您基本上是在全局范围内创建静态变量。这样做在技术上没有任何错误,但是使用 Singleton pattern . 这将更容易控制对此的访问,并且可能更容易包装资源,以提供更好的线程安全性、此逻辑的封装等。

        2
  •  0
  •   richardtallent    17 年前

    推荐文章