C# 如何仅在运行时更新中需要时更新列表?
在顶部:C# 如何仅在运行时更新中需要时更新列表?,c#,unity3d,C#,Unity3d,在顶部: public List<Vector3> lineRendererPositions = new List<Vector3>(); 然后在更新中: private void Update() { lineRendererPositions.AddRange(GetLinePointsInWorldSpace()); } 问题是列表越来越大,所以游戏越来越慢。 我可以在前面添加一行,为列表创建一个新实例: private voi
public List<Vector3> lineRendererPositions = new List<Vector3>();
然后在更新中:
private void Update()
{
lineRendererPositions.AddRange(GetLinePointsInWorldSpace());
}
问题是列表越来越大,所以游戏越来越慢。
我可以在前面添加一行,为列表创建一个新实例:
private void Update()
{
lineRendererPositions = new List<Vector3>();
lineRendererPositions.AddRange(GetLinePointsInWorldSpace());
}
private void Update()
{
LineRenderPositions=新列表();
lineRenderPositions.AddRange(GetLinePointsInWorldSpace());
}
但我不确定这是否是更新列表的好方法。
我希望在从GetLinePointsInWorldSpace获取位置时,如果它们与LineRenderPositions列表中的位置不同,则更新(AddRange)
或者使用新实例就足够了?游戏越来越落后,因为每一帧都将
线点添加到当前列表中。这会迅速增加内存使用。在AddRange()之前添加lineRenderPositions.Clear()
这样就好了。您不必进行检查,因为这两种情况的复杂性都是O(n)
。问题似乎并不那么明显。
这种用法看起来很浪费,那么你应该问自己这些问题
您需要何时更新列表
执行此操作后,您需要更新哪些列表
private void Update()
{
lineRendererPositions = new List<Vector3>();
lineRendererPositions.AddRange(GetLinePointsInWorldSpace());
}