Foreach循环和LINQ循环之间的主要区别是什么?
哪一个具有更好的性能,以及它们的缺点。
我有两个不同的例子可以产生相同的结果:
foreach(var countryItem in input.availableCountries) {
var ddlItem = new ListItem();
ddlItem.Text = countryItem.Value;
ddlItem.Value = countryItem.Key;
ddlNationalityCountry.Items.Add(ddlItem);
}
和
ddlNationalityCountry.Items.AddRange(input.availableCountries.Select(
item => new ListItem {
Text = item.Value,
Value = item.Key
}).ToArray());
我应该使用哪一个?
答案 0 :(得分:-2)
linq运营商有少量开销。通常,此开销是不驱动应用程序的性能。此外,开销使您能够更轻松地在其他地方创造效率。
一些效率是针对程序员的:代码更清晰,错误更少,维护更容易。一些效率是使构建更快的算法更容易。
我的意思是,您的第一个示例是将项目添加到集合中。你的第二个样本正在生成一个数组。你为什么要创建那个数组?我知道你需要它用于函数调用,但在大多数其他情况下,你不会。 Linq允许您根据集合的管道进行思考,最终结果在最后一步之前永远不会完全实现,并且沿途的每个步骤仅作用于那些相关的元素,因此通常会节省批次比linq开销会花费你更多的计算机时间或内存。
如果你只是使用linq编写与foreach相同的东西,linq将会是一个(小的!)净性能损失(但可能仍然是净生产力的胜利)。如果你学会接受linq可以做的事情,那么linq可以获得很大的净胜利。