cos*_*ost 2 c# benchmarking caching runtime
我正在做一些基准测试来测试一些东西.我有一个大量的1亿64位整数,我随机选择了1000万个并进行了一些操作.索引是随机选择的,因为我试图尽可能地保持CPU缓存,同时仍然获得准确的基准.循环的第一次迭代大约需要0.3秒,其他所有循环只需要0.2秒.我唯一的猜测是,cone []的部分仍然在缓存中,但我认为使用这个大小的数组它将无法存储太多.还有其他想法吗?
也许是JIT问题?
static void Main(string[] args)
{
Int64[] cone = new Int64[100000001];
for (int m = 0; m < 20; ++m)
{
int[] num2 = new int[10000001];
Random rand = new Random();
for (int i = 0; i < 10000000; ++i)
{
num2[i] = rand.Next(100000000);
}
DateTime start = DateTime.Now;
for (int i = 0; i < 10000000; ++i)
{
cone[num2[i]] = i;
if (cone[i] > 0) ++cone[i];
}
DateTime finish = DateTime.Now;
TimeSpan elapsed = finish - start;
Console.WriteLine("Took: {0}", elapsed);
Thread.Sleep(100);
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)