使用out参数和返回值时的性能考虑?

时间:2014-01-18 06:24:23

标签: c# .net

从c#中获取返回值和函数输出参数的结果会有什么性能差异?

4 个答案:

答案 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
    }
}

Reference of out

Reference 2

<强>返回 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

Return Reference

答案 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方法的堆栈帧。”

因此,性能方面,如果您使用的是小值类型,则returnout之间没有任何明显的性能差异。

答案 3 :(得分:-2)

基本上你想要使用return如果该方法没有别的东西可以返回,如果你希望通过单一方法返回其他东西,你可以使用out。表现明智,没有区别。

Which is better, return value or out parameter?