В чем преимущество ключевого слова "yield" с точки зрения разобщенной WEB-архитектуры - PullRequest
1 голос
/ 10 июля 2010

После прочтения различных постов и вопросов SO, я понимаю, что если у нас очень длинная цепочка данных, то с выходом может быть хорошо, но, пожалуйста, скажите мне, насколько он опытен в ASP.NET, или вы можете сказать, что отключенная веб-архитектураточка зрения.Например, я передаю свои данные из базы данных через DAL, и теперь соединение отключено.Теперь у меня есть данные в моем BL из моего DAL, теперь я должен применить foreach для этих данных (мне нужно обработать каждый из них по одному) и затем вернуть коллекцию в мой пользовательский интерфейс.Считаете ли вы, что здесь будет полезно использовать yield?

Спасибо Vij

Ответы [ 3 ]

2 голосов
/ 10 июля 2010

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

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

1 голос
/ 10 июля 2010

В зависимости от компоновки вашего источника данных, если у вас был просмотр списка по страницам, и вы хотели отображать только первые 10 элементов на каждом.Тогда вам не нужно будет отправлять все 3000 элементов на ваш отключенный веб-сайт, что должно привести к более быстрому рендерингу.

Конечно, это можно сделать с помощью SQL, но все базы данных возвращают указатель (итератор) на первую строку в наборе, который вы хотите отобразить.Таким образом, вы получаете производительность в любом случае, но то, сколько вы получите, зависит от вашей архитектуры, от того, как вы настроили свой уровень данных и использовали его, хотя и из своих моделей и репозиториев.

0 голосов
/ 10 июля 2010

Выход не имеет ничего общего с вопросом, который вы задаете.Это не имеет ничего общего с производительностью.Это не означает «уступить ЦП» или «уступить поток».Это всего лишь часть синтаксиса для создания собственного перечислителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...