【发布时间】:2019-04-04 13:36:48
【问题描述】:
编辑说错误:内存不足。大家好,我正在学习排序列表。 PrintMessage 方法每秒运行一次。并且 Add 功能导致了该错误。您能根据代码打击判断出什么问题吗?谢谢。
void PrintMessage(GameObject gameObject) {
Target newTarget = new Target(gameObject, transform.position);
targets.Add(newTarget);
print(targets[targets.Count-1].Distance.ToString());
}
public void Add(T item)
{
int num;
// add your implementation below
if (items.Count != 0)
{
for (int i = 0; i < items.Count; i++)
{
num = item.CompareTo(items[i]);
if (num >= 0)
{
tempList.AddRange(items.GetRange(i, items.Count - i));
items.RemoveRange(i, items.Count - i);
items.Add(item);
items.AddRange(tempList);
tempList.Clear();
continue;
}
}
items.Add(item);
}
else
{
items.Add(item);
}
}
【问题讨论】:
-
为什么还需要
targets.Add(newTarget)?该方法用于“打印对象”,因此不需要将对象添加到列表中。 -
无论如何它都会将一个新的目标对象添加到排序列表中。最后将打印最近的物距。
-
您正在遍历所有项目,并将每个项目添加到循环中的“项目”中。因此,您的增长是指数级的。你确定你想要那个内部的
items.Add(item)电话吗? (在 for 循环内)? -
而不是
continue;,你可能想做return;.. 否则你在for循环中调用items.Add至少两次甚至更频繁...... -
我明白了。多谢你们。回报是我想做的。我认为 continue 也可以。
标签: list unity3d out-of-memory sortedlist