C#遍历List创建对象时,直接传属性比用中间变量性能更好吗?
结论
两种写法没有可感知的性能差异,直接传属性的写法不会带来明显的性能提升。
原因解释
你定义的id、price只是方便读代码的临时变量,在Release模式开启编译器优化后,.NET的JIT编译器会直接消掉这类没有额外逻辑的多余变量,最终生成的机器码和你直接把apple.ID、apple.Price传入构造函数的写法完全一致,执行效率没有任何区别。
就算不开优化,你的列表只有几千条数据,两种写法的性能差最多是纳秒级,实际运行根本感知不到,完全没必要为了这个点改代码。
实际能提升性能的优化方向
与其纠结临时变量的开销,不如优先改这些确实有收益的点:
- 把现在三个独立的
if判断改成if-else if结构,匹配到对应水果类型后就跳过后面的类型检查,不用每个元素都做三次类型校验。 - 初始化结果列表的时候预先设好容量:
List<FruitIdentifier> fruitIdentifiers = new List<FruitIdentifier>(fruitList.Count);,避免列表动态扩容的时候反复申请内存、拷贝数据,这个优化的收益比调整临时变量高得多。 - 后续如果还要加更多水果类型,可以给Apple、Orange、Mango提取一个公共的
IFruit接口,把ID、Price属性定义在接口里,就不用写这么多分支判断,代码可读性和可维护性都会好很多。
内容的提问来源于stack exchange,提问作者dragon123
相关产品推荐
相关产品推荐

