代码:在相同usings执行相同代码块的持续时间如此不同的原因是什么?
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,在发布时,结果是一样的。
任何人都可以解释这种行为吗?
也许尝试使用变量而不是'Console.WriteLine'?这可能是问题所在。 – ispiro
当我在linqpad中运行你的代码时,它给我两个代码块约2.5秒。在ideone上运行时,它会给两个块提供〜0.3秒的时间:https://ideone.com/ReOpaH。 – Chris
也使用适当的秒表。你打电话给你的日期时间变量sw,这意味着你想要使用秒表,但是你没有使用秒表。 – Chris