Выход в основном инструктирует компилятору генерировать Enumerator (который является простым конечным автоматом), который передает ваши данные по требованию, цикл foreach, начинающийся над IEnumerable, «вытягивая» каждый элемент.
Таким образом, все, что может делать оператор yield в вашем конкретном контексте, - это ленивая семантика потоковой передачи, что означает, что получатель может прекратить итерации в любое время и, следовательно, сократить объем передаваемых данных. Сравните это с возвратом полностью заполненных коллекций в одной партии, что вы получаете, когда не используете yield
. Если это эффективно или нет, зависит от множества факторов, о которых вы не предоставили никакой информации, поэтому я не могу вам помочь.