Menu
Coddy logo textTech

Loop Performance

Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 13 из 66.

Оптимизация производительности циклов может значительно улучшить скорость вашего приложения, особенно при работе с большими наборами данных.

Сохраните длину коллекции в переменной перед циклом:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Store length once

for (int i = 0; i < length; i++) // Use stored value
{
    Console.WriteLine(numbers[i]);
}

Избегайте повторных вызовов методов в условиях циклов, например:

for (int i = 0; i < GetCount(); i++)
{
    // Loop body
}

Метод GetCount() вызывается на каждой итерации цикла. Это означает, что если цикл выполняется 1000 раз, GetCount() будет выполнен также 1000 раз, поскольку условие цикла вычисляется перед каждой итерацией.

Вот как правильно это сделать:

int count = GetCount();
for (int i = 0; i < count; i++)
{
    // Loop body
}

GetCount() вызывается только один раз перед началом цикла, и его значение сохраняется в переменной count. Затем цикл использует это сохранённое значение для всех итераций, устраняя необходимость повторного вызова метода.

Этот подход может ускорить выполнение вашего кода за счет сокращения избыточных операций, особенно когда вызываемый метод выполняет сложные вычисления или доступ к данным.

challenge icon

Задание

Легко

Создайте метод с названием optimizedSum, который:

  1. Принимает массив целых чисел в качестве параметра
  2. Вычисляет сумму всех элементов
  3. Реализует как оптимизированный, так и неоптимизированный подход:
    • Неоптимизированный: Вызов array.Length в каждой итерации цикла
    • Оптимизированный: Кэширование длины перед циклом
  4. Возвращает результат от оптимизированного подхода

Шпаргалка

Сохраните длину коллекции в переменной перед циклом, чтобы избежать повторного доступа к свойству:

int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Store length once

for (int i = 0; i < length; i++) // Use stored value
{
    Console.WriteLine(numbers[i]);
}

Избегайте повторных вызовов методов в условиях циклов, кэшируя результат:

// Inefficient - method called every iteration
for (int i = 0; i < GetCount(); i++)
{
    // Loop body
}

// Optimized - method called once
int count = GetCount();
for (int i = 0; i < count; i++)
{
    // Loop body
}

Попробуйте сами

public class OptimizedSum
{
    // Реализуйте метод optimizedSum
    public static int optimizedSum(int[] numbers)
    {
        // Напишите ваш код здесь
        
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком