我期待myApp.exe的运行速度比myApp.vshost.exe快,但是

时间:2011-09-22 15:59:39

标签: c# performance

来自vshost(在VS版本中运行)

 array pure 00:00:02.9634819
 1200000000
 Basic: 00:00:04.1682663

来自独立程序(编译版)

 array pure 00:00:09.1783278 // slower, why?
 1200000000
 Basic: 00:00:00.5985118  // faster, as expected

所以似乎从VS运行有时可以加快程序的速度?

我的测试代码是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace vsHostTest
{
    class Program
    {
        static long Five(int s0, int s1, int s2, int s3, int s4)
        {
            return s4 + 100 * s3 + 10000 * s2 + 1000000 * s1 + 100000000 * s0;
        }

        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            long testSize = 10000000;
            int[] myarray = new int[] { 1, 2, 3 };
            watch.Start();
            for (int j = 0; j < testSize; j++)
            {

                bool i = myarray.Contains(2);

            }
            watch.Stop();
            Console.WriteLine("array pure {0}", watch.Elapsed);

            testSize = 200000000;
            long checksum = 0;
            watch.Restart();
            for (long i = 0; i < testSize; i++)
            {
                long ret = Five(1, 2, 3, 4, 5);
                checksum += ret % 9;
            }
            watch.Stop();
            Console.WriteLine(checksum);
            Console.WriteLine("Basic: {0}", watch.Elapsed);
            Console.ReadKey();
        }
    }
}

1 个答案:

答案 0 :(得分:3)

我每次跑四次,但不包括每个平均值的第一个结果。

  

vshost:

     

数组纯:6.83基本:3.62

     

console:

     

数组纯:6.64基本:1.57

我应该补充一点,vshost中的所有时间都比在控制台中慢。我不确定你为什么会得到你的结果,但vshost将一个调试器附加到进程,而通过控制台运行它不会。由于这个原因,控制台版本总是会更快。

此外,在对.net应用程序进行基准测试时,运行测试一次不足以获得准确的测量结果。你应该总是多次运行测试,抛出第一次(如果你不想比较冷运行,如.net高速缓存)或最偏远的测量。

另外,我觉得这个问题很愚蠢,你确定在通过控制台运行时运行了发布版本吗?我确定你做到了,但我总是这么想,因为我有时会犯这样的愚蠢错误。