【发布时间】:2016-03-30 15:16:33
【问题描述】:
我有一个列表,我想将它的数组分配给一个属性。
public void BuildMesh(List<Vector3> list){
mesh.vertices=list.ToArray();
}
现在的问题:
- 该项目是游戏,在垃圾收集方面非常困难,因此 ToArray() 的默认实现不是一个选项,因为它会在列表的内部数组旁边创建一个新数组。
- 网格对象来自封闭源 API,顶点属性是 Vector3[],因此无法为其分配指针。
我是否有任何选项来阻止堆分配?
编辑:这不是重复的
不能使用IList<Vector3>。网格来自闭源 API,需要 Vector3[],因此我无法将 IList<Vector3> 分配给它。
【问题讨论】:
-
@VadimMartynov 这是另一个问题。网格来自封闭源 API,需要 Vector3[],因此我无法将 IList
分配给它。 -
如果您有固定大小的对象,请不要丢弃该对象。相反,只需将对象标记为未使用。在程序开始时创建一个固定的对象数组。然后标记已使用或未使用的对象,而不是创建和处置该对象。不需要垃圾收集。
-
List 中的内部数组与您看到的实际项目大小不同。你也许可以通过反射来做到这一点,但它本身的反射比简单的 ToArray 会造成很多混乱。例如,如果您有 80 个项目,如果您直接获取内部数组,您将获得大小为 128 的数组。如果列表太大,也许反射会有所帮助。你必须自己测试一下。
-
@M.kazemAkhgary 这就是重点。由于您提到它的确切原因,不能使用内部数组。在您描述的情况下,内部数组是 128,但我需要一个包含 80 个成员的数组。
标签: c# unity3d pointers data-structures heap-memory