在阅读了各种帖子和SO问题之后,我明白如果我们拥有非常长的数据链,那么收益率可能会很好但请告诉我它是如何精通ASP.NET或者你可以说断开连接的网络架构观点看法。例如,我通过DAL从数据库中提取数据,现在连接已断开连接。现在我从我的DAL中获取了数据,现在我必须为该数据应用foreach(我需要逐个处理它们)并将该集合返回到我的UI。你认为在这里使用收益率会不会很好?
由于 维吉
答案 0 :(得分:2)
Yield基本上指示编译器生成一个Enumerator(它是一个简单的状态机),按需流式传输数据,foreach循环迭代IEnumerable“拉”每个元素。
所以yield语句在你的特定上下文中可以做的就是提供延迟流语义,这意味着接收器可以随时停止迭代,从而减少传输的数据量。相比之下,在一个批次中返回完全填充的集合,这是您在不使用yield
时获得的。如果这是一个有效的东西取决于很多因素,你没有提供任何信息,所以我不能再帮你了。
答案 1 :(得分:1)
根据数据源的布局,如果您有分页列表视图,并且只想显示每个数据源的前10个元素。然后,您不必将所有3000个项目发送到断开连接的网站,这实际上应该可以提高渲染速度。
当然,这可以通过SQL完成,但是所有数据库都会将指针(迭代器)返回到您希望显示的集合的第一行。因此,您可以获得性能,但获得的收益取决于您的体系结构,以及如何设置数据层并将其用于视图模型和存储库。
答案 2 :(得分:0)
Yield与您提出的问题无关。它与性能没有任何关系。它并不意味着“产生CPU”或“产生线程”。它只是创建自定义枚举器语法的一部分。