在.Net中创建局部变量

123*_*per 4 c# premature-optimization

我只是想知道创建局部变量以接受函数的返回值将会影响.Net应用程序中的内存使用或性能,尤其是在ASP.Net中.

 MyObject myObject = Foo();
 MyOtherObject myOtherObject = Boo();

 SomeFuntion(myObject, myOtherObject);
Run Code Online (Sandbox Code Playgroud)

要么

我应该用吗?

 MyFunction(Foo(), Boo());
Run Code Online (Sandbox Code Playgroud)

当然以前的用法具有更好的可读性..但是内存使用和性能呢?

在此先感谢123Developer

Mar*_*ell 15

不要过早优化; 在发布版本中,编译器很可能无论如何都会优化它们!无论哪种方式,你只是在谈论少量的堆栈空间(大概)一些引用.两种方法都没问题; 选择哪个更具可读性.


Gre*_*ech 5

CIL(编译C#的中间语言)是一种基于堆栈的语言,因此中间函数的返回值需要在作为参数传递到最后一个之前在堆栈上结束.

根据本地人的说法,没有办法预测C#编译器会做什么[1] ; 它可能决定在你做的时候使用locals,或者它可能会使用堆栈行为并完全跳过它们.同样,它可能会合成本地人,即使你不使用它们,或者它可能不会.

无论哪种方式,性能差异都不值得担心.


[1]是的,当然,您可以编译并查看它生成的IL以确定它将执行的操作,但这仅对您正在使用的当前版本的编译器有效,并且是您不应该执行的实现细节依靠.