小编Per*_*eak的帖子

没有GC的无限方法参数

我正在尝试创建一个函数,可以接收无限量的参数,而无需创建GC.

我知道这可以通过params关键字完成,但它会创建GC.还要明白你可以将数组传递给函数但我想知道是否可以传递无限的方法参数而不创建GC并且不创建数组或列表并将其传递给List.

这是param代码的示例:

void Update()
{
    GameObject player1 = GameObject.Find("Player1");
    GameObject player2 = GameObject.Find("Player2");

    GameObject enemy1 = GameObject.Find("Enemy1");
    GameObject enemy2 = GameObject.Find("Enemy2");
    GameObject enemy3 = GameObject.Find("Enemy3");

    Vector3 newPos = new Vector3(0, 0, 0);
    moveObjects(newPos, 3f, player1, player2, enemy1, enemy2, enemy3);
}

void moveObjects(Vector3 newPos, float duration, params GameObject[] objs)
{
    for (int i = 0; i < objs.Length; i++)
    {
        //StartCoroutine(moveToNewPos(objs[i].transform, newPos, duration));
    }
}
Run Code Online (Sandbox Code Playgroud)

即使StartCoroutine注释掉函数执行,它也会分配80个字节.起初,我认为这是发生的,因为我使用了foreach循环,然后我将其更改为for循环,但它仍然创建GC然后我意识到这 …

c# memory-management variadic-functions unity-game-engine

9
推荐指数
2
解决办法
673
查看次数