速度:制作新变量或将变量设置为0?

时间:2011-12-24 20:15:22

标签: c# loops unity3d

我正在制作一个小游戏,这有很多循环,它们都使用某个变量adjacentSquares。但是,在每个循环之后,应将其设置为0。什么会更快,每次再次创建此变量或只是将其设置为0?是否有某种“异国情调”的方法可以表现得更好?

相关(未完成)代码:

void Update () 
    {           
        int adjacentSquares = 0;

        for (int x = 0; x <= gridX; x++)
        {
            for (int y = 0; y <= gridY; y++)
            {
                if (grid[x - 1,y - 1] == true)
                    adjacentSquares += 1;
                //and some more logic
            }
        }

    }

4 个答案:

答案 0 :(得分:3)

为什么不使用System.Diagnostics.Stopwatch类来实验和测量经过的时间? http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

在该循环之前设置一个秒表对象,然后测量它之后的经过时间。然后,用你的发现报告:D

答案 1 :(得分:1)

这里真正的答案是:试一试,看看!

但是,我不希望速度有所不同。如果有的话,你的堆栈将使用4个字节的更多内存(每个变量),但即便如此也不能保证。有一个很好的改变(如果这里有性能优势)C#编译器或JIT编译器将识别出不再使用第一个变量,因此它将简单地将相同的内存用于后续变量。但我会回应我之前所说的:运行一些测试 - 这是你问题的唯一真实答案。

答案 2 :(得分:0)

如果你真的想在这里提高性能,可以考虑在这里做一个并行解决方案,具体取决于每个单独的计算是否依赖于你以前完成的所有计算。

您甚至可以使用LINQ执行此操作,具体取决于您正在执行的“更多逻辑”。

答案 3 :(得分:0)

只是为了提高性能:

void Update () 
{           
    int adjacentSquares = 0;

    for (int x = -1; x < gridX; x++)
    {
        for (int y = -1; y < gridY; y++)
        {
            if (grid[x, y])
                adjacentSquares++;
            //and some more logic
        }
    }
}

我不知道为什么你需要从-1(0 - 1)开始,但是如果你有,那么把它放在for上,而不是每次都执行相同的操作。