我正在制作一个小游戏,这有很多循环,它们都使用某个变量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
}
}
}
答案 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上,而不是每次都执行相同的操作。