2014-01-18 38 views
-5

當從c#函數的返回值和輸出參數獲取結果時,性能差異是什麼?使用out參數和返回值時的性能考慮?

+1

沒有可測量的性能差異。投票關閉。 –

+0

出參數作爲一個對象的引用,當你傳遞值時,你必須將'out'放在值的前面,並且返回從函數返回值,這將有助於你理解'out',然後再問一個關於這個問題的問題 –

+0

@Simon:還有其他原因要關閉,但是*表現差異......如果你看起來真的非常努力並且眯起眼睛。 – JasonS

回答

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

0

回報是較低性能 返回構建體在父範圍的(方法的)堆棧一個新的變量,而該值/參考被複制到它。

out是更快的性能 out傳遞給你的函數一個對父變量作用域中的變量的引用。所以chaning變量將會立刻改變的結果,父母的

OUT與參考: 有「out」和「裁判」的關鍵字之間不存在性能差異,只是一個編譯時安全檢查。

編輯:這裏是哪裏會的問題作出解釋:如果你調用一個方法每秒數十億次:What is the benefit of using out/ref versus returning?否則,只是讓你的代碼很容易理解。

+1

PS:PREMATURE O PTIMIZATION是所有邪惡的根源!不要做魔鬼的工作。 – JasonS

+0

任何關於'return'的信息都比'out'慢? – MarcinJuraszek

+0

如果您有權訪問XNA DLL,請查看Vector和Matrix替代方法。你會看到他們喜歡通過ref傳遞。這是因爲這個原因。對不起,我目前沒有鏈接。 (這裏有一些這樣的博客文章) – JasonS

0

正如我在評論中提到的,out參數性能被@JonSkeet描述爲here。這是Jon的答案:

「基本上,通過使用out參數,我們直接將數據寫入最終目標,而不是將其寫入小方法的堆棧幀,然後將其複製回Main方法的堆棧幀。「

所以明智的性能,如果您使用的是較小的值類型,那麼就沒有returnout之間的任何顯著的性能差異。

+0

......它是一個小值類型沒有區別。一個巨大的參考類型複製框架的參考..這是無法估量的快速。 –