Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅在运行时更新中需要时更新列表?_C#_Unity3d - Fatal编程技术网

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());
            }