gpt4 book ai didi

c# - 在这种情况下如何减少垃圾的产生

转载 作者:太空宇宙 更新时间:2023-11-03 11:19:58 25 4
gpt4 key购买 nike

我的游戏已经到了生成过多垃圾的地步,导致 GC 时间过长。我一直在四处寻找并减少产生的大量垃圾,但有一个地方过于频繁地分配大量内存,我一直在思考如何解决这个问题。

我的游戏是一个 minecraft 类型的世界,它会在您行走时生成新的区域。我有一个大的、可变大小的数组,它是在创建一个新区域时分配的,该区域用于存储地形的顶点数据。数组填充数据后,它会传递给 slimdx DataStream,以便用于渲染。

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

到目前为止,仅在需要变大时才调整数组的大小对我来说似乎是唯一可行的选择,但它可能效果不佳,而且实现起来可能会很痛苦。我需要单独跟踪数组的实际大小,并使用不安全代码获取指向数组的指针并将其传递给 slimdx。它也可能最终会使用如此大量的内存,以至于我不得不偶尔将所有数组的大小减少到所需的最小值。

我犹豫要不要跳到这个解决方案,想知道是否有人对此有更好的解决方案。

最佳答案

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

关于c# - 在这种情况下如何减少垃圾的产生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com