Menu
Coddy logo textTech

ループのパフォーマンス

CoddyのC#ジャーニー「ロジックとフロー」セクションの一部。レッスン 13/66。

ループのパフォーマンスを最適化すると、特に大規模なデータセットを扱う場合に、アプリケーションの速度を大幅に向上させることができます。

ループの前にコレクションの長さを変数に格納します:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // 長さを一度だけ保存

for (int i = 0; i < length; i++) // 保存した値を使用
{
    Console.WriteLine(numbers[i]);
}

ループ条件内でのメソッド呼び出しの繰り返しを避けます。例:

for (int i = 0; i < GetCount(); i++)
{
    // ループ本体
}

GetCount()メソッドは、ループのすべての反復で呼び出されます。つまり、ループが1000回実行される場合、ループ条件は各反復の前に評価されるため、GetCount()も1000回実行されます。

正しく行う方法は次のとおりです:

int count = GetCount();
for (int i = 0; i < count; i++)
{
    // ループ本体
}

GetCount() はループ開始前に一度だけ called され、その値は count 変数に stored されます。その後、ループはすべての iteration でこの stored value を使用するため、method を繰り返し called する必要がなくなります。

この approach は、特に呼び出される method が複雑な計算や data アクセスを実行する場合に、冗長な操作を削減することで、コードをより高速に実行できるようにします。

challenge icon

チャレンジ

簡単

optimizedSum と呼ばれる method を作成します。この method は次の処理を行います:

  1. 整数の配列をパラメーターとして受け取る
  2. すべての要素の合計を計算する
  3. optimized と Unoptimized の両方の approach を実装する:
    • Unoptimized:each ループ iteration で array.Length を呼び出す
    • Optimized:ループの前に length をキャッシュする
  4. Optimized approach から result を返す

自分で試してみよう

public class OptimizedSum
{
    // optimizedSum メソッドを実装する
    public static int optimizedSum(int[] numbers)
    {
        // ここにコードを書いてください
        
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: C#オンラインコンパイラ