C# 在.Net中创建局部变量

C# 在.Net中创建局部变量,c#,premature-optimization,C#,Premature Optimization,我只想知道,在.Net应用程序中,创建局部变量以接受函数的返回值会影响内存使用或性能,特别是在ASP.Net中 说 或 我应该用吗 MyFunction(Foo(), Boo()); 当然,前一种用法的可读性更好。。但是内存使用和性能如何呢 提前谢谢 123开发者不要过早地优化;在发布版本中,编译器很可能会对这些进行优化!不管是哪种方式,您只是在谈论(大概)几个引用的少量堆栈空间。两种方法都可以;选择可读性更好的。我相信内存性能基本相同。除非性能测试显示出显著的差异,否则选择可读性增强的选项

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

我应该用吗

 MyFunction(Foo(), Boo());
当然,前一种用法的可读性更好。。但是内存使用和性能如何呢

提前谢谢
123开发者不要过早地优化;在发布版本中,编译器很可能会对这些进行优化!不管是哪种方式,您只是在谈论(大概)几个引用的少量堆栈空间。两种方法都可以;选择可读性更好的。我相信内存性能基本相同。除非性能测试显示出显著的差异,否则选择可读性增强的选项。

CIL(C#编译成的中间语言)是一种基于堆栈的语言,因此中间函数的返回值必须在作为参数传递给最终函数之前在堆栈上结束

无法预测C#编译器将如何使用局部变量[1];当您这样做时,它可能会决定使用局部变量,也可能会使用堆栈行为并完全跳过它们。类似地,它可能会合成本地人,即使你不使用它们,也可能不会

不管怎样,性能差异都不值得担心



[1] 是的,当然,您可以编译并查看它生成的IL来确定它将做什么,但这只对您正在使用的编译器的当前版本有效,并且是一个不应该依赖的实现细节。

不要害怕使用局部变量。内存使用和性能的差异非常小,或者在某些情况下根本没有差异

在您的特定情况下,局部变量可能会使用8字节(64位应用程序中为16字节)的堆栈空间。但是,如果需要临时存储,编译器可以自己创建局部变量,因此两个版本都可能具有相同的局部变量集

此外,编译器可以对某些局部变量使用处理器寄存器而不是堆栈空间,因此甚至不能确定创建局部变量是否实际使用任何堆栈空间

无论如何,分配堆栈空间是非常便宜的。调用该方法时,将为该方法中的本地数据创建堆栈帧。如果必须分配更多内存,这只会改变堆栈指针的移动量,根本不会产生任何额外的代码


因此,只需编写代码,使其具有可维护性和健壮性,并相信编译器会优化变量的使用。

我实际上发现,如果MyFunction没有太多的参数,那么后面的代码是完全可读的,而且我更喜欢它。Concur。此外,为了对性能产生可测量的影响,您必须在这样的函数上有相当严重的负载。在ASP.NET应用程序中,首先关注您对viewstate所做的操作以及通过网络发送的任何其他内容。+1用于在任何情况下提及堆栈创建。完美答案。
 MyFunction(Foo(), Boo());