来自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();
}
}
}
答案 0 :(得分:3)
我每次跑四次,但不包括每个平均值的第一个结果。
vshost:
数组纯:6.83基本:3.62
console:
数组纯:6.64基本:1.57
我应该补充一点,vshost中的所有时间都比在控制台中慢。我不确定你为什么会得到你的结果,但vshost将一个调试器附加到进程,而通过控制台运行它不会。由于这个原因,控制台版本总是会更快。
此外,在对.net应用程序进行基准测试时,运行测试一次不足以获得准确的测量结果。你应该总是多次运行测试,抛出第一次(如果你不想比较冷运行,如.net高速缓存)或最偏远的测量。
另外,我觉得这个问题很愚蠢,你确定在通过控制台运行时运行了发布版本吗?我确定你做到了,但我总是这么想,因为我有时会犯这样的愚蠢错误。