代码A:
string a = "abc";
for(int i=0;i<1000;i++){
Console.WriteLine(a);
}代码B:
for(int i=0;i<1000;i++){
Console.WriteLine("abc");
}是不是代码A性能更好?

解决方案 »

  1.   

    我测试了一下B代码的性能更好 static void Main(string[] args)
            {
                Stopwatch sw1 = new Stopwatch();
                int times = 100000;
                //代码A:
                string a = "abc";
                sw1.Start();
                for (int i = 0; i < times; i++)
                {
                    Console.WriteLine(a);
                }
                sw1.Stop();
                TimeSpan ts1 = sw1.Elapsed;
                
                //代码B:
                Stopwatch sw2 = new Stopwatch();
                sw2.Start();
                for (int i = 0; i < times; i++)
                {
                    Console.WriteLine("abc");
                }
                sw2.Stop();
                TimeSpan ts2 = sw2.Elapsed;
                Console.WriteLine("A总时间:{0}ms,B总时间:{1}ms", ts1.TotalMilliseconds, ts2.TotalMilliseconds);
                Console.ReadKey();
      

  2.   

    debug测试?那当然,因为debug的时候要关联到你的代码,和实际发行版是两个概念的东西。
      

  3.   

    debug测试?那当然,因为debug的时候要关联到你的代码,和实际发行版是两个概念的东西。
    嗯  确实是debug版
      

  4.   

    debug测试?那当然,因为debug的时候要关联到你的代码,和实际发行版是两个概念的东西。
    我还release也是B好 10万次大概是8000ms:4000ms
      

  5.   


    发布版运行结果。
    你这样也不是没见过,之前见过一个java的程序员拿java发布好的东西跟c#debug比较说c#效率差的。
      

  6.   

    debug测试?那当然,因为debug的时候要关联到你的代码,和实际发行版是两个概念的东西。
    我还release也是B好 10万次大概是8000ms:4000ms
    这些差异是其他原因导致的,不是实际的代码因素,你看看il代码就发现结果都是一样的。
      

  7.   


    奇怪了我用的是release
      

  8.   


    奇怪了我用的是release字符串直接写在Console.Write里比用变量要来的快
    毕竟ldstr肯定比ldloc.s要来的快
    至于IL执行的时候优化能做的怎么样就不知道了
    不过也不会到你这种2倍的差距
      

  9.   

    那从gc上看是不是更节省垃圾回收次数,我记得b方案每次都会创建字符串