与直接返回分配给此变量的值相比,在函数中创建临时变量是否存在性能损失或内存消耗差异?
例如,哪些功能(GetValue)性能更好,节省内存或两者都完全相同:
案例1:
private string GetValue()
{
return this.GetResult();
}
private string GetResult()
{
// Code here that return a big string...
}
案例2:
private string GetValue()
{
string result = this.GetResult();
return result;
}
private string GetResult()
{
// Code here that return a big string...
}
谢谢。
答案 0 :(得分:13)
在这些基本情况下,可读性总是胜过性能差异。我认为这最好是微观优化,而这些很大程度上是浪费时间。您节省的费用将被不确定的GC运行所吞噬。
如果允许编译器对其进行优化,则大多数情况下生成的代码没有差异。在这种情况下得到的IL似乎有一些额外的操作码来引用堆栈上的字符串,但是JIT随后对此做了什么是任何人的猜测。
我有时会在返回之前分成临时变量来审查它们,但我从不担心性能影响。最重要的是,我从未见过需要这种改进来解决性能问题的案例。
答案 1 :(得分:5)
如果可执行代码实际使用了局部变量,并且没有选择,那么差异仍然很小。
局部变量只使用存储引用所需的堆栈空间,并且为它分配空间根本不需要时间,因为总是分配堆栈帧。
从局部变量进行额外复制的时间几乎无法衡量。如果你在紧密循环中调用该方法数百万次,它只会产生影响,而且与分配字符串所花费的时间相比,它仍然只是执行时间的一小部分。
答案 2 :(得分:0)
始终对局部变量进行优化。
在return语句之前使用局部变量不会对性能产生影响。
Check here,以查看两个类的编译输出。
我更喜欢总是使用局部变量,因为它可以加快调试速度。 根据{{3}}的说法,开发人员花费了75%的时间进行调试。