我想知道在列表中查找项目索引的最快方法是什么。我想知道的原因是因为我正在制作 XNA 渲染,但是当我只使用顶点缓冲区时,我开始在较大的模型上出现内存不足的异常,所以我现在已经实现了一个索引缓冲区系统。我的问题是我现在必须连续扫描一个包含我所有 Vector3 的列表,以查找我想要放置在我的索引缓冲区中的下一个的索引。我目前正在扫描这样的索引:
for (int i = 1; i < circleVect.Length; i++)
{
indices.Add(vertices.FindIndex(v3 => v3 == circleVect[i]));
indices.Add(vertices.FindIndex(v3 => v3 == circleVect[i - 1]));
indices.Add(vertices.FindIndex(v3 => v3 == middle));
}
除了它相当慢之外,这很好用。计算一个圆柱体几乎需要 1 秒,而我的大型模型中有超过 70 000 个圆柱体。因此,我在加载较大的模型时看到加载屏幕超过 20 分钟,但仍未完成。不幸的是,这根本是不可接受的。如果我尝试加载较小的模型,则需要 5 分钟以上,而未索引的加载器只需要一秒钟左右。
我完全没有在 C# 方面接受过正式培训,在 XNA 方面甚至更少,所以我知道这可能是一种非常低效的计算索引的方法,因此如果你们中的任何人能帮助我创建一个更高效的导入器,我将不胜感激。
PS。如有必要,我可以将列表更改为数组,但这将是最后的选择,因为它可能会给系统内存带来压力(导致异常),并且对我来说意味着相当多的编码。