コード:同じ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(){}
}
}
2つの同一ブロック。
出力:
2051657985
00:00:00.3690996
2051657985
00:00:02.2640266
第2のブロックが2.2秒かかります!しかし、使用を取り除く場合、期間は同じになりました(最初のものと同様0.3秒)。 私は.NET Framework 4.5と.net core 1.1で試してみましたが、リリースでは結果は同じです。
誰でもその動作を説明できますか?
'Console.WriteLine'の代わりに変数を使ってみてください。それは問題かもしれません。 – ispiro
私はあなたのコードをlinqpadで実行すると、両方のコードブロックが〜2.5秒ということになります。理想的に実行すると、両方のブロックで約0.3秒が得られます:https://ideone.com/ReOpaH。 – Chris
また、適切なストップウォッチを使用してください。ストップウオッチを使用したいが、あなたはストップウォッチを使用しないことを意味するdatetime変数swを呼び出します。 – Chris