は、私が頻繁に必要とするオブジェクトを置くことを決めました。
今ではDrawScreen機能ですべてのフレームを作成および破棄する必要はありません。私は、私はこの機能を経由して行うれ、新しいレベルやGFXシートがロードされるときに、それを配置し、変更する必要があります。VB/C#:ディスポーザブルオブジェクトをグローバルスコープに配置:これは問題ありませんか? (S_AreaBMP呼ばれる)全体レベルのレンダリング済み画像とSDL表面 - - グローバルスコープに最適化として
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はいくらかのクリーンアップを行っていますが、必ずしも高価ではありません。フレームごとに新しい/廃棄がどのようにパフォーマンスに影響するかを見ることはできません。特にそれを避けると、コードが壊れます。 – adrianm
おっと、私は混ざりました。私はその印象を与えたページを振り返りました。そして、Disposeではなく、コストがかかるFinalizeメソッドを持っています。私は適切に問題を解決します。 –