C#中变量提前初始化传参与参数内初始化的性能及语法差异问题
C# 两种传参写法的性能与语法问题解答
以下是你提到的两种写法的代码参考:
第一种:
public object Foo() { var command = new MyCommand(param1); return Myfunction(command); }
第二种:
public object Foo() { return Myfunction(new MyCommand(param1)); }
内存与性能差异结论
两种写法在Release模式开启编译器优化的场景下,没有任何性能、内存占用的差异:
- C#的JIT编译器会自动优化掉第一种写法中没有后续操作的局部临时变量,最终生成的IL代码和汇编代码和第二种完全一致
- 两种写法中
MyCommand实例的堆内存分配、回收逻辑完全相同,不会出现第一种写法多占内存的情况
仅在未开启优化的Debug模式下,第一种写法会为了支持断点调试保留局部变量的栈空间存储,会有可忽略的极微小编译差异,普通业务场景下完全感知不到性能差距。
语法名称说明
第二种直接在方法参数位写对象初始化表达式的写法,属于内联临时变量初始化的写法,没有专属的官方语法命名,确实属于广义上的内联写法范畴,核心是省略了显式声明单次使用的局部变量的步骤,直接将表达式的求值结果作为参数传递给方法。
写法选择建议
- 如果需要调试查看
command的取值、或者后续还要复用这个实例,选择第一种写法 - 如果仅单次传参,不需要额外操作实例,选择第二种写法更简洁,不会影响代码可读性
内容的提问来源于stack exchange,提问作者Danny Ellis Jr.
相关产品推荐
相关产品推荐

