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++中可以优化掉,这里如何做?

解决方案 »

  1.   

    不明白。这段程序似乎是for循环完全结束后再执行最后二句的意思啊。
      

  2.   

    意思就是 当 for(int i=0;i<100;++i) 时,最后输出可能是0
    for(int i=0;i<100000000;++i)时,可能是 12
    for(int i=0;i<1000000000;++i)时,就成了125由此可以看出, 循环没有被优化掉。因为如果优化掉了,不论是多少,最后时间都时0 (b被常数10000....替代,VC++就是这样优化的。)
      

  3.   

    >>>VC++就是这样优化的
    这么变态的优化效果?不会吧,都改变了语义。如果我在VC++里,就像让它循环1000000次岂不是做不到。
      

  4.   


    当然这个东西很明显,自己可以优化掉,那么复杂一些的呢? 这个问题足以看出,CSC做的优化很浅。
    是不是有什么后期IL优化工具?我总觉得这不是MS的作风,或者,编译器依赖惯了。
    --------
    VC++的确可以这样优化,如过就想让他这样的话,可以使用一种古怪的方法,比如 
    void fun(int a){for(int i=0;i<a;i++){...}};
    fun(100000000);
    但这不是这个帖子要讨论的。。
      

  5.   

    很遗憾,在我这里就算把++b 注释掉,也不优化 (VC# 2003 和 VC# 2005 express )。