Я написал следующую тестовую программу в .Net Core 2.2, и ее выполнение на 3 разных компьютерах дает примерно одинаковый результат: второй метод выполнения всегда выполняется быстрее.
код:
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
for (int i = 0; i < 10; i++)
{
RunTest();
}
}
private static void RunTest()
{
const long cnt = 1000000000;
var time1 = Test1(cnt);
var time2 = Test2(cnt);
Console.WriteLine($"Done in: {time1} vs {time2} diff: {time1 - time2}");
}
private static TimeSpan Test1(long cnt)
{
var v = 1;
var timer = Stopwatch.StartNew();
for (long i = cnt; i != 0; i--)
{
v = RotateBit(v);
}
timer.Stop();
return timer.Elapsed;
}
private static TimeSpan Test2(long cnt)
{
var v = 1;
var timer = Stopwatch.StartNew();
for (long i = cnt; i != 0; i--)
{
v = RotateBit(v);
}
timer.Stop();
return timer.Elapsed;
}
private static int RotateBit(int v)
{
v = v << 1;
if ((v & 0b0000_1111) == 0)
{
v = 1;
}
return v;
}
}
Обратите внимание, что методы Test1
и Test2
являются абсолютными копиями.
Нет счетчика, который является первым Test1
или Test2
, выполненный, который выполняется первым, всегда почти в 2 раза быстрее: Done in: 00:00:00.8881566 vs 00:00:00.4706360 diff: 00:00:00.4175206
, хотя метод RunTest
выполняется несколько раз.
В чем может быть причина такого странного поведения?