关于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++)
{
//循环体
}