我的游戏已经到了产生过多垃圾的地步,并导致了较长的GC时间。我一直在努力减少产生的大量垃圾,但是有一个地方过于频繁地分配大量内存,我一直坚持如何解决这个问题。

我的游戏是一个minecraft类型的世界,在您行走时会产生新的区域。我有一个很大的可变大小的数组,该数组在创建用于存储地形顶点数据的新区域时分配。在数组中填充数据后,将其传递到slimdx DataStream,以便可用于呈现。

问题在于,这是一个可变大小的数组,需要将其传递给slimdx,后者在其上调用GCHandle.Alloc。由于其大小可变,因此可能需要调整大小以重新使用它。我也不能只为每个区域分配最大大小的数组,因为这将需要大量的内存。由于GChandle与slimdx有关,因此我无法使用列表。

到目前为止,对阵列调整大小仅在需要将其变大时才是我唯一可行的选择,但是这样做可能效果不佳,并且可能难以实施。我需要分别跟踪数组的实际大小,并使用不安全的代码来获取指向数组的指针并将其传递给slimdx。它最终可能最终会使用如此大量的内存,以至于我不得不偶尔去将所有数组的大小减小到所需的最小值。

我很想了解这个解决方案,并想知道是否有人认为有更好的解决方案。

最佳答案

我建议与slimdx库进行更紧密的集成。它是开源的,因此您可以深入挖掘并找到渲染所需的关键路径。然后,您可以使用DMA样式的内存共享方法来更紧密地集成。

07-24 13:05