私のゲームはガベージを生成しすぎて、GC 時間が長くなるところまで来ています。私は周りを回って生成されたガベージを減らしてきましたが、大量のメモリを頻繁に割り当てている場所が1つあり、これを解決する方法に行き詰まっています.
私のゲームは、歩くと新しい領域が生成されるマインクラフト タイプの世界です。地形の頂点データを格納するために使用される新しい領域の作成時に割り当てられる、大きな可変サイズの配列があります。配列がデータで満たされた後、slimdx DataStream に渡され、レンダリングに使用できるようになります。
問題は、これが可変サイズの配列であり、GCHandle.Alloc を呼び出す slimdx に渡す必要があることです。可変サイズであるため、再利用するにはサイズを変更する必要がある場合があります。また、信じられないほど大量のメモリが必要になるため、各領域に最大サイズの配列を割り当てることもできません。Slimdx との GCHandle ビジネスのため、リストを使用できません。
これまでのところ、配列を大きくする必要がある場合にのみ配列のサイズを変更することは、私にとって唯一のもっともらしいオプションのようですが、うまくいかない可能性があり、実装するのが面倒になる可能性があります。配列の実際のサイズを個別に追跡し、アンセーフ コードを使用して配列へのポインターを取得し、それを slimdx に渡す必要があります。また、最終的に非常に大量のメモリを使用することになる可能性があるため、すべての配列のサイズを必要最小限に減らす必要があります。
私はこの解決策に飛びつくのをためらっています.誰かがこれに対するより良い解決策を見ているかどうか知りたいです.