日期:2014-05-17  浏览次数:20939 次

关于for循环中结束条件运算次数问题
请问C#中下面这两个代码运算次数是否一样,会被编译器优化吗?

代码1:
for (int i = 0;i < 10; i++)
{
}

代码2:
int a = 2;
int b = 5;
for (int i = 0; i < a * b; i++)
{
}

在C++语言中是否一样?
谢谢!

------解决方案--------------------
1.循环次数是死的
2.循环次数是由a * b来决定的,每次循环都要计算一下乘积,如果在循环内部没有改变a,b的值的话,循环次数就是一致的.
------解决方案--------------------
第二个,每次循环都会计算a*b,效率低下
------解决方案--------------------
这就要看第二段代码内部有没有修改ab的值,如果没改,效果一样但是效率不一样
------解决方案--------------------
不是说 for (int i = 0;i < 10; i++)中,这个10引起的效率低。而是将这个10算出来的效率低

因此,循环中的次数最好是个定值。在进入循环前循环次数就应该先计算出来

比如:
int count = xxList.Count;
for(int i=0;i<count;i++) 这样写的效率是高于 for(int i=0;i<xxList.Count;i++)的

------解决方案--------------------
代码2:
int a = 2;
int b = 5;
for (int i = 0; i < a * b; i++)
{
}
----改写成:

代码2:
int a = 2;
int b = 5;
int result = a*b;
for (int i = 0; i < result ; i++)
{
}

这样的话,效率和代码1是一样的了。

------解决方案--------------------
[code=C#][/code]
int a = 2;
int b = 5;
int result = a*b;
for (int i = 0; i < result ; i++)
{
}

这样的话,效率就是一样的了。

------解决方案--------------------
C# code

int a = 2;
int b = 5;
for (int i = 0, length = a * b;i < length ; i++)
{
   //循环体
}