Производительность циклов
Часть раздела Логика и управление потоком путешествия по C# на Coddy. Урок 13 из 66.
Оптимизация производительности цикла может значительно повысить скорость вашего приложения, особенно при работе с большими наборами данных.
Сохраните length коллекции в переменной перед циклом:
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length; // Сохранить длину один раз
for (int i = 0; i < length; i++) // Использовать сохранённое значение
{
Console.WriteLine(numbers[i]);
}Избегайте повторных вызовов method в условиях цикла, например:
for (int i = 0; i < GetCount(); i++)
{
// Тело цикла
}Метод GetCount() вызывается на каждой итерации цикла. Это означает, что если цикл выполняется 1000 раз, GetCount() также будет выполнен 1000 раз, поскольку условие цикла проверяется перед каждой итерацией.
Вот как это сделать правильно:
int count = GetCount();
for (int i = 0; i < count; i++)
{
// тело цикла
}GetCount() вызывается только один раз перед началом цикла, и его значение stored в переменной count. Затем цикл использует это сохранённое значение на всех итерациях, устраняя необходимость многократно вызывать method.
Этот approach может ускорить выполнение вашего кода за счёт сокращения избыточных операций, особенно когда method, который был called, выполняет сложные вычисления или обращается к data.
Задание
ЛегкоСоздайте method called optimizedSum, который:
- Принимает массив целых чисел в качестве параметра
- Вычисляет сумму всех элементов
- Реализует оба подхода — Optimized и Unoptimized:
- Unoptimized: Вызывает array.Length в каждой итерации цикла
- Optimized: Кэширует length перед циклом
- Возвращает result из подхода Optimized
Попробуйте сами
public class OptimizedSum
{
// Реализуйте метод optimizedSum
public static int optimizedSum(int[] numbers)
{
// Напишите ваш код здесь
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовОбъявление и инициализация 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиЗубчатые массивыОсновные операции с матрицамиПовторение — многомерные массивы4Методы управления потоком выполнения
Досрочный выходЗащитные условияОператоры перехода (goto)Break и ContinueУпрощение вложенных условных конструкций7Логические операторы: продвинутый уровень
Вычисление с коротким замыканиемУсловные логические операторыПриоритет операторовПовторение — продвинутые операторы2Продвинутое принятие решений
Множественные условияСложная логика BooleanСравнение If и SwitchВложенные конструкции SwitchПовторение — продвинутые решения5Обработка исключений
Основы Try-CatchТипы исключенийНесколько блоков CatchРабота с файламиБлок FinallyИспользование Using вместо Try-FinallyПользовательские исключенияПовторение — обработка ошибок3Улучшение циклов
Производительность цикловИтерация по сложным структурамКаждый тип циклаРефакторинг цикловПовторение — оптимизированные циклы6Обработка null
Основы ссылок на nullТипы значений, допускающие nullШаблоны проверки на nullЗащитное программированиеПовторение — безопасность при работе с nullПотренируйтесь самостоятельно: Онлайн-компилятор C#