从堆列中获取数组而不分配堆

mor*_*avi 6 c# heap pointers unity-game-engine data-structures

我有一个列表,我想将其数组分配给一个属性.

public void BuildMesh(List<Vector3> list){
    mesh.vertices=list.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

现在的问题:

  • 该项目是游戏,并且在垃圾收集方面非常困难,因此ToArray()的默认实现不是一个选项,因为它在列表的内部数组旁边创建了一个新数组.
  • 网格对象来自闭源API,顶点属性是Vector3 [],因此无法为其指定指针.

我有任何阻止堆分配的选项吗?

编辑:这不是重复

不能用IList<Vector3>.网格来自一个封闭的源API,需要Vector3 []所以我无法分配IList<Vector3>它.

Ran*_*UAN 2

我认为您正在使用Unity。如果我是对的,请尝试mesh.SetVertices(list)接受List<Vector3>.

  • 我认为这是不可能的,因为 List&lt;T&gt; 的内部数组可能比它的 Count 更大。如果特定数量的顶点经常使用,例如始终使用 64 个顶点,那么您可以尝试重用该数组以防止进一步的堆分配。 (2认同)
  • 我认为这与API设计有关。如果 API 设计为通常与可重用的固定大小缓冲区一起使用,那么数组就很好,例如 System.IO.Stream API。否则,API 的设计就很糟糕。 (2认同)