【发布时间】:2011-06-25 18:27:38
【问题描述】:
我有大量需要提供给 OpenGL 的值类型。如果这能尽快发生,那就太好了。 我现在正在做的事情是这样的:
List<Vertex> VList = new List<Vertex>();
... //Add vertices
Vertex[] VArray;
VList.CopyTo(VArray, VList.Length);
GL.SetData(..., VArray);
这个列表很容易有 10MB 大,所以复制很慢。我可以在不复制的情况下做到这一点,比如以某种方式获取指向 List 内部使用的数组的指针吗?
还是我必须实现自己的 List 类..
编辑:我忘了提到我不知道将添加到列表中的元素数量。
【问题讨论】:
-
@Iain,大概他不知道他将使用多少个
Vertex对象。 -
因为我不知道开头的长度。我必须制作一个大得离谱的数组,然后调整它的大小。
-
@Hannesh,我的猜测是,因为我还没有调查过,所以列表的后备数组将有许多空槽,这些空槽将在随后的
Add操作中被填充。这是为了便于快速添加操作,而不必不断调整数组的大小(当然,它会在必要时这样做)。因此,1) 对后备数组的直接引用可能仍需要一些清理。 2) 如果您真的关心性能,请注意此调整大小并做出相应计划。 -
@Anthony:List
:D @Hannesh 也没有,如果您自己推出,请确保您对其进行分析。您的 IList 实现可能比 List 慢得多,以至于开销大于收益。 -
有谁知道为什么不暴露内部数组?我看不出这可能有害的任何原因。