我有一个与大量相同类型的对象一起工作的项目。List <>循环优化
现在我使用List<Person>
,但是似乎在我有大约1 000 000个项目时循环遍历这个列表是困难的。
在循环中,每个Person
都有一个被调用的方法,并且有随机生成的新项目,并且有些项目被删除。
我该怎么做才能优化这个循环? 我应该更改集合类型还是将项目移动到数据库?
这是循环的样子:
while (_worldIsLiving)
{
int beginningPopulation = WorldPopulationNumber;
for (int i = 0; i < beginningPopulation; i++)
{
_worldPopulation[i].InvokeSkills(this);
}
// Remove dead persons
for (int i = 0; i < WorldPopulationNumber;)
{
if (_worldPopulation[i].IsDead()) _worldPopulation.RemoveAt(i);
else i++;
}
WorldCycles++;
if (_hasStopCondition && (WorldPopulationNumber >= WorldMaximumPopulation || WorldPopulationNumber == 0))
Destroy();
}
在_worldPopulation[i].InvokeSkills(this);
可以产生新的人员。
技能有chanceToBeInvoken
和chanceTobeInherited
字段。
迭代速度更快的唯一方法是使用普通数组,但这可能只会产生一个边际差异。任何优化通常都在循环中的代码中,而不是容器中。要回答这个问题,我们需要更多地了解循环中的代码。 –
当你说“循环通过这个列表很难”你是什么意思的“硬”?只需要几个元素就可以轻松循环列表 - 只需要更长的时间。 – Enigmativity
项目存储在内存中。 '人'拥有技能列表,每个技能都有机会被调用。 主循环中的代码:我调用调用随机技能的Person类中的方法。 @MatthewWatson 循环很难,因为一个循环需要大量的项目需要一分钟左右的时间。 @Enigmativity –