最高效(在执行速度方面)将List <typea>映射到List <typeb> </typeb> </typea>的方式

时间:2013-08-03 14:59:56

标签: c# .net performance execution-time

我有TypeA和B这样:

class TypeA
{

prop 1;
prop 2;
prop 3;
prop 4;
...
prop 15;
}

class TypeB
{

prop a;
prop b;
prop c;
...
prop p;
}

TypeB的每个属性值都将通过操纵TypeA的某些属性来构造。

现在我需要做类似

的事情
List<TypeB> list= SomeConverter(List<TypeA>);

源列表可能包含大约5000个对象。

我想知道最快的方法。代码可读性不是我关注的问题。

我需要映射的类型很少。

谢谢

2 个答案:

答案 0 :(得分:2)

您将无法避免将TypeA的每个实例转换为TypeB的实例的成本,但您可以通过设置初始容量来避免调整列表大小的成本:< / p>

List<TypeB> listB = new List<TypeB>(listA.Count);
listB.AddRange(listA.Select(SomeConverter));

TypeB SomeConverter(TypeA input)
{
    return new TypeA() { ... };
}

或者这样,性能稍好一点:

List<TypeB> listB = new List<TypeB>(listA.Count);
foreach(var a in listA)
{
    listB.Add(SomeConverter(a));
}

当然,在许多情况下,最大的表现来自于首先过度使用列表。例如,在调用Linq查询时调用ToList()会强制立即计算查询,并将结果保存到List<T>。相反,如果您可以将评估推迟到最晚,您通常会避免大部分最昂贵的处理。通常,除非您确实需要对集合进行动态插入/删除,否则几乎可以肯定应该避免使用列表。

答案 1 :(得分:1)

AutoMapper对于这种情况来说是一个不错的库,没有在大量的列表中尝试它,试一试。

相关问题