код:
internal class Program
{
private static void Main(string[] args)
{
const int iterCount = 999999999;
var sum1 = 0;
var sum2 = 0;
using (new Dis())
{
var sw = DateTime.Now;
for (var i = 0; i < iterCount; i++)
sum1 += i;
Console.WriteLine(sum1);
Console.WriteLine(DateTime.Now - sw);
}
using (new Dis())
{
var sw = DateTime.Now;
for (var i = 0; i < iterCount; i++)
sum2 += i;
Console.WriteLine(sum2);
Console.WriteLine(DateTime.Now - sw);
}
Console.ReadLine();
}
private class Dis : IDisposable
{
public void Dispose(){}
}
}
Два одинаковых блока в идентичных случаях.
Вывод:
2051657985
00:00:00.3690996
2051657985
00:00:02.2640266
Второй блок занимает 2,2 секунды! Но если избавиться от привычек, продолжительности стали такими же (~ 0,3 с, как и первый). Я пробовал с .net framework 4.5 и .net core 1.1, в выпуске, результаты одинаковы.
Может ли кто-нибудь объяснить это поведение?