【发布时间】:2013-03-13 08:13:27
【问题描述】:
我有一个游戏循环,它绘制了一个对象列表,该列表称为“mylist”并包含大约 1000 个对象,需要不断从列表中添加和删除对象(尤其是快速飞行并击中物体的子弹),每秒有几个对象。
如果我理解正确,如果列表容量足够大,则 List 中的插入实际上是免费的,问题在于删除是 O(n),因为首先我需要在列表中找到项目,其次它创建删除后的新列表。
如果我可以汇总所有删除并在每帧中进行一次,那将是有效的,因为我将使用 mylist.Except(listToRemove) 并且这将在 O(n) 中。 但不幸的是我做不到。
链接列表也有问题,因为我需要在列表中找到对象。
有人有更好的建议吗?
【问题讨论】:
-
这都是理论上的,还是实际上遇到了问题? 1000 个对象并不是那么大,所以我很惊讶听到这种大小的性能问题。我的意思是,您是否真的分析并发现这是瓶颈?
-
@Oded 二次处理 1000 个对象大约是 500k 次操作。这不再是微不足道的成本。
-
是理论上的,但不仅如此,写这么低效的代码感觉不对。