初始化List类型属性:Array.Empty转List对比new List有性能优势吗?
两种List属性初始化方式的性能对比分析
这两种初始化方式并非性能等效,方式一的性能更优,方式二存在不必要的额外调用开销,具体分析如下:
方式一:直接调用new List<string>()
直接调用List的无参构造函数,底层逻辑是直接初始化List实例,内部会根据.NET版本设置默认容量(比如早期版本默认容量为4,.NET Core及之后默认初始容量为0),整个过程没有额外的中间调用,是最直接的List初始化方式。
方式二:Array.Empty<string>().ToList()
这个方式分为两步:
Array.Empty<string>():返回一个全局共享的空字符串数组,这部分确实能避免重复分配空数组,符合你提到的Array.Empty的优势;- 调用
ToList()扩展方法:这个方法会先检查源集合是否实现了ICollection<T>(空数组属于这类),然后调用List<TSource>(ICollection<T>)构造函数。即使源集合是空的,这个过程依然会执行类型检查、容量设置(将List容量设为0)等操作,虽然没有实际的元素复制,但相比方式一多了完整的扩展方法调用链和构造逻辑。
核心差异总结
两种方式都会分配List对象,但方式二多了一层扩展方法调用和ICollection类型适配的开销——哪怕这个开销很小,但在高频创建Person实例的场景下,累计差异会体现出来。如果你只是要初始化一个空的List属性,方式一是更高效的选择。
内容的提问来源于stack exchange,提问作者NSouth
相关产品推荐
相关产品推荐

