【发布时间】:2018-01-16 13:21:44
【问题描述】:
我想知道这两种从 2 个(或更多)对象列表创建列表的方法在性能上是否存在差异。
我问是因为作为初学者,我使用方式 2(在许多小型项目中)编写了大多数情况,所以我想知道是否应该用方法 1 替换方法 2。
示例来自:Create a list from two object lists with linq
方式一:
var mergedList=new List<Person>();
mergeList.AddRange(list1);
mergeList.AddRange(list2);
方式二:
var mergedList=new List<Person>();
foreach(var item in list1)
{
mergedList.Add(item);
}
foreach(var item in list2)
{
mergedList.Add(item);
}
【问题讨论】:
-
有些东西是马,有些东西与它们赛跑。您是否尝试过任何性能监控?
-
再一次向ericlippert.com/2012/12/17/performance-rant 提出问题,不要寻找没有问题的问题。或者换句话说:"premature optimization is the root of all evil"。话虽如此,你根本不应该用另一个替换所有出现的情况,除非你有强烈的需要这样做。
-
List
确实有一个以容量为参数的构造函数。它是内部数组中保留的插槽数量。列表以 10 的容量开始,如果您在上面添加项目,则必须重新创建内部数组并每次复制现有项目。在您的情况下,您知道要插入的列表的大小,因此您可以使用 list1.Count + list2.Count 的容量初始化合并列表。