Sam*_*uel 12 c# memory performance
与直接返回分配给此变量的值相比,在函数中创建临时变量是否存在性能损失或内存消耗差异?
例如,这些函数中的哪一个(GetValue)性能更好,节省内存或两者都完全相同:
情况1:
private string GetValue()
{
return this.GetResult();
}
private string GetResult()
{
// Code here that return a big string...
}
Run Code Online (Sandbox Code Playgroud)
案例2:
private string GetValue()
{
string result = this.GetResult();
return result;
}
private string GetResult()
{
// Code here that return a big string...
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Ada*_*rth 15
在这些基本情况下,可读性总是胜过性能差异.我认为这是一个微观优化,这些很大程度上是浪费时间.你在此节省的东西将被不确定的GC运行吃掉.
大多数情况下,如果允许编译器对其进行优化,则生成的代码没有差异.在这种情况下得到的IL似乎有一些额外的操作码来引用堆栈上的字符串,但是JIT然后对此做了什么是任何人的猜测.
我有时会在返回之前分成临时变量来检查它们,但我从不担心性能影响.最重要的是,我从未见过需要这种改进来解决性能问题的案例.
如果局部变量实际上是由可执行代码使用的,而未被拒绝,那么差异仍然很小。
局部变量仅使用存储引用所需的堆栈空间,并且为它分配空间完全没有时间,因为无论如何总会分配堆栈帧。
与本地变量之间来回复制的时间几乎无法测量。仅当您在紧密的循环中调用该方法数百万次时,它才会有所不同,并且与分配字符串所花费的时间相比,它仅占执行时间的一小部分。