You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初始化List类型属性:Array.Empty转List对比new List有性能优势吗?

两种List属性初始化方式的性能对比分析

这两种初始化方式并非性能等效,方式一的性能更优,方式二存在不必要的额外调用开销,具体分析如下:

方式一:直接调用new List<string>()

直接调用List的无参构造函数,底层逻辑是直接初始化List实例,内部会根据.NET版本设置默认容量(比如早期版本默认容量为4,.NET Core及之后默认初始容量为0),整个过程没有额外的中间调用,是最直接的List初始化方式。

方式二:Array.Empty<string>().ToList()

这个方式分为两步:

  1. Array.Empty<string>():返回一个全局共享的空字符串数组,这部分确实能避免重复分配空数组,符合你提到的Array.Empty的优势;
  2. 调用ToList()扩展方法:这个方法会先检查源集合是否实现了ICollection<T>(空数组属于这类),然后调用List<TSource>(ICollection<T>)构造函数。即使源集合是空的,这个过程依然会执行类型检查、容量设置(将List容量设为0)等操作,虽然没有实际的元素复制,但相比方式一多了完整的扩展方法调用链和构造逻辑。

核心差异总结

两种方式都会分配List对象,但方式二多了一层扩展方法调用和ICollection类型适配的开销——哪怕这个开销很小,但在高频创建Person实例的场景下,累计差异会体现出来。如果你只是要初始化一个空的List属性,方式一是更高效的选择。

内容的提问来源于stack exchange,提问作者NSouth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:12:03