using System;
class test
{
public static void Main()
{
int b = 0; DateTime t1 = DateTime.Now;
for(int i=0;i<1000000000;++i)
++b;
TimeSpan ts1 = DateTime.Now - t1;
Console.WriteLine(ts1.Milliseconds);
}
}输出的时间随着 循环 增加而增加,所以循环没有被优化掉?release/optimize 已打开。如何是好?VC++中可以优化掉,这里如何做?
class test
{
public static void Main()
{
int b = 0; DateTime t1 = DateTime.Now;
for(int i=0;i<1000000000;++i)
++b;
TimeSpan ts1 = DateTime.Now - t1;
Console.WriteLine(ts1.Milliseconds);
}
}输出的时间随着 循环 增加而增加,所以循环没有被优化掉?release/optimize 已打开。如何是好?VC++中可以优化掉,这里如何做?
for(int i=0;i<100000000;++i)时,可能是 12
for(int i=0;i<1000000000;++i)时,就成了125由此可以看出, 循环没有被优化掉。因为如果优化掉了,不论是多少,最后时间都时0 (b被常数10000....替代,VC++就是这样优化的。)
这么变态的优化效果?不会吧,都改变了语义。如果我在VC++里,就像让它循环1000000次岂不是做不到。
当然这个东西很明显,自己可以优化掉,那么复杂一些的呢? 这个问题足以看出,CSC做的优化很浅。
是不是有什么后期IL优化工具?我总觉得这不是MS的作风,或者,编译器依赖惯了。
--------
VC++的确可以这样优化,如过就想让他这样的话,可以使用一种古怪的方法,比如
void fun(int a){for(int i=0;i<a;i++){...}};
fun(100000000);
但这不是这个帖子要讨论的。。