从c#中获取返回值和函数输出参数的结果会有什么性能差异?
答案 0 :(得分:0)
out关键字导致参数通过引用传递。这与ref关键字类似,不同之处在于ref要求在传递变量之前对其进行初始化。要使用out参数,方法定义和调用方法都必须显式使用out关键字。例如:
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
<强>返回强> return语句终止它出现的方法的执行,并将控制返回给调用方法。它还可以返回一个可选值。如果方法是void类型,则可以省略return语句。
如果return语句在try块内,则finally控件(如果存在)将在控制返回调用方法之前执行。
class ReturnTest
{
static double CalculateArea(int r)
{
double area = r * r * Math.PI;
return area;
}
static void Main()
{
int radius = 5;
double result = CalculateArea(radius);
Console.WriteLine("The area is {0:0.00}", result);
// Keep the console open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: The area is 78.54
答案 1 :(得分:0)
返回效果较差 return在父作用域(方法)堆栈中构造一个新变量,并将该值/引用复制到它。
out表现更快 out向您的函数传递对父范围中变量的引用。所以chaning变量将立即改变父母的结果
out vs ref: “out”和“ref”关键字之间没有性能差异,只是编译时安全检查。
编辑:这里有一个重要的解释:如果你每秒调用一次方法几十亿次:What is the benefit of using out/ref versus returning? 否则,只需制作你的代码易于理解。
答案 2 :(得分:0)
正如我在评论中提到的那样,out参数性能由@JonSkeet描述here。这是Jon的回答摘录:
“基本上通过使用out参数,我们将数据直接写入最终目标,而不是将其写入小方法的堆栈帧,然后将其复制回Main方法的堆栈帧。”强>
因此,性能方面,如果您使用的是小值类型,则return
和out
之间没有任何明显的性能差异。
答案 3 :(得分:-2)
基本上你想要使用return
如果该方法没有别的东西可以返回,如果你希望通过单一方法返回其他东西,你可以使用out
。表现明智,没有区别。