エンジニアの備忘録

エンジニアの私が備忘録や思ったことをちょいちょい書いてます。

C#でループ(for, foreach)の処理速度比較

C#でよくループ文を行うと思います。
その時の処理速度気になりますよね。
実際にやってみた結果はとても驚きました。

処理内容

それぞれ1億回ループ実行

for : 1.4230秒

for(int i = 0; i < _num.Count(); i++) {
    Processing(i);
}

foreach : 0.5329秒

foreach(int i in _num) {
    Processing(i);
}

まとめ

forとforeachでは今回は約3倍の差がでました。
何回か行うと2倍ほどになるときが多いです。
でもここまでの差が生じるので、使う時は気を付けないといけないですね。

全コード

public static class LoopSpeed
{
    //1億
    private static IEnumerable<int> _num = Enumerable.Range(0, 100000000);
    private static Stopwatch _sw;
    public static void Check()
    {
        _sw = Stopwatch.StartNew();
        //for
        for(int i = 0; i < _num.Count(); i++)
        {
            Processing(i);
        }
        Console.WriteLine("for : " + _sw.Elapsed);
        _sw = Stopwatch.StartNew();
        //foreach
        foreach(int i in _num)
        {
            Processing(i);
        }
        Console.WriteLine("foreach : " + _sw.Elapsed);
    }
    private static void Processing(int i)
    {
        //処理なし
    }
}