ループのパフォーマンス
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 アクセスを実行する場合に、冗長な操作を削減することで、コードをより高速に実行できるようにします。
チャレンジ
簡単optimizedSum と呼ばれる method を作成します。この method は次の処理を行います:
- 整数の配列をパラメーターとして受け取る
- すべての要素の合計を計算する
- optimized と Unoptimized の両方の approach を実装する:
- Unoptimized:each ループ iteration で array.Length を呼び出す
- Optimized:ループの前に length をキャッシュする
- Optimized approach から result を返す
自分で試してみよう
public class OptimizedSum
{
// optimizedSum メソッドを実装する
public static int optimizedSum(int[] numbers)
{
// ここにコードを書いてください
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: C#オンラインコンパイラ