🔄 Вернёмся к теме вопросов на job interview!
В продолжение предыдущего поста о паттерне Итератор.
Само собой, вы уже рассказали об интерфейсах IEnumerable и IEnumerator, перечислили методы и свойства интерфейса IEnumerator:
• MoveNext()
• Reset()
• Current
Рассказали, как они работают.
🤔 Логичным будет следующий вопрос:
Что вы знаете про yield?
Уже в следующем уроке мы этот самый yield подробно разберём!
Будут бенчмарки с пруфами!
🔑 А пока, вот основные моменты, которые стоит помнить о yield:
1️⃣ Разворачивается в стейт-машину
При компиляции метод с yield преобразуется в скрытый класс, который управляет состоянием итерации (реализует IEnumerator).
2️⃣ Отложенное выполнение
Код внутри метода с yield не выполняется сразу, а только тогда, когда последовательность начинает перечисляться (например, в цикле foreach).
Это может значительно повысить производительность, так как позволяет получать элементы по одному, а не всю коллекцию сразу. Чем больше элементов в коллекции, тем больше мы выигрываем в производительности.
3️⃣ Эффективное использование памяти
Поскольку элементы обрабатываются по очереди, yield позволяет работать с большими коллекциями, не занимая много оперативной памяти. Это особенно полезно при обработке сотен тысяч объектов, когда нет необходимости хранить всю коллекцию в памяти. Используем меньше памяти. Реже отрабатывает сборщик мусора, что довольно накладно.
З.Ы. На Udemy эта тема уже есть. Там я буду выкладывать всё немного раньше в качестве благодарности за финансовую поддержку. https://www.udemy.com/course/simplecode-cshap/?referralCode=53C0314076F77DCC2A02
В продолжение предыдущего поста о паттерне Итератор.
Само собой, вы уже рассказали об интерфейсах IEnumerable и IEnumerator, перечислили методы и свойства интерфейса IEnumerator:
• MoveNext()
• Reset()
• Current
Рассказали, как они работают.
🤔 Логичным будет следующий вопрос:
Что вы знаете про yield?
Уже в следующем уроке мы этот самый yield подробно разберём!
Будут бенчмарки с пруфами!
🔑 А пока, вот основные моменты, которые стоит помнить о yield:
1️⃣ Разворачивается в стейт-машину
При компиляции метод с yield преобразуется в скрытый класс, который управляет состоянием итерации (реализует IEnumerator).
2️⃣ Отложенное выполнение
Код внутри метода с yield не выполняется сразу, а только тогда, когда последовательность начинает перечисляться (например, в цикле foreach).
Это может значительно повысить производительность, так как позволяет получать элементы по одному, а не всю коллекцию сразу. Чем больше элементов в коллекции, тем больше мы выигрываем в производительности.
3️⃣ Эффективное использование памяти
Поскольку элементы обрабатываются по очереди, yield позволяет работать с большими коллекциями, не занимая много оперативной памяти. Это особенно полезно при обработке сотен тысяч объектов, когда нет необходимости хранить всю коллекцию в памяти. Используем меньше памяти. Реже отрабатывает сборщик мусора, что довольно накладно.
З.Ы. На Udemy эта тема уже есть. Там я буду выкладывать всё немного раньше в качестве благодарности за финансовую поддержку. https://www.udemy.com/course/simplecode-cshap/?referralCode=53C0314076F77DCC2A02