當從c#函數的返回值和輸出參數獲取結果時,性能差異是什麼?使用out參數和返回值時的性能考慮?
回答
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
基本上你想使用return
如果方法沒有別的東西可以返回,如果你想通過單一方法返回其他東西,你可以使用out
。性能明智沒有區別。
回報是較低性能 返回構建體在父範圍的(方法的)堆棧一個新的變量,而該值/參考被複制到它。
out是更快的性能 out傳遞給你的函數一個對父變量作用域中的變量的引用。所以chaning變量將會立刻改變的結果,父母的
OUT與參考: 有「out」和「裁判」的關鍵字之間不存在性能差異,只是一個編譯時安全檢查。
編輯:這裏是哪裏會的問題作出解釋:如果你調用一個方法每秒數十億次:What is the benefit of using out/ref versus returning?否則,只是讓你的代碼很容易理解。
PS:PREMATURE O PTIMIZATION是所有邪惡的根源!不要做魔鬼的工作。 – JasonS
任何關於'return'的信息都比'out'慢? – MarcinJuraszek
如果您有權訪問XNA DLL,請查看Vector和Matrix替代方法。你會看到他們喜歡通過ref傳遞。這是因爲這個原因。對不起,我目前沒有鏈接。 (這裏有一些這樣的博客文章) – JasonS
正如我在評論中提到的,out參數性能被@JonSkeet描述爲here。這是Jon的答案:
「基本上,通過使用out參數,我們直接將數據寫入最終目標,而不是將其寫入小方法的堆棧幀,然後將其複製回Main方法的堆棧幀。「
所以明智的性能,如果您使用的是較小的值類型,那麼就沒有return
和out
之間的任何顯著的性能差異。
......它是一個小值類型沒有區別。一個巨大的參考類型複製框架的參考..這是無法估量的快速。 –
- 1. 返回一個值,同時考慮到的日期和數字
- 2. 考慮的參數和使用它
- 3. 性能考慮
- 4. 算++:參考VS值返回和未使用的參數
- 5. ODP.NET數組綁定返回/ OUT參數性能
- 6. Flex性能考慮
- 7. PHP參考參數VS返回功能
- 8. 返回參考值/左值
- 9. 的PreparedStatement,CallableStatement的和性能考慮
- 10. 返回void搞亂參考參數值
- 11. 絃樂和StringBuilder的性能考慮 - C#
- 12. 返回日期+考慮到時差
- 13. 的Java 8函數總是返回相同的值在不考慮參數
- 14. 參考返回值時出錯
- 15. 與db.BlobProperty性能考慮()
- 16. 登錄C++(性能考慮)
- 17. 性能考慮多次
- 18. 函數和性能的返回值
- 19. Java - 使用多種方法時的性能考慮
- 20. 模板參數演繹是否考慮了返回類型?
- 21. C++:返回參考臨時
- 22. C++返回參考臨時
- 23. C++和返回參考
- 24. 的javascript如何獲取函數的返回值out參數功能
- 25. 返回參考
- 26. 用於超時的API設計:TimeoutException或帶out參數的布爾返回值?
- 27. RSGetState in out參數返回空指針?
- 28. 在excel中使用C++ dll時沒有考慮到的參數
- 29. C++函數返回範圍和參考
- 30. asp.net-MVC2 - 控制器不返回查看時考慮區域考慮()
沒有可測量的性能差異。投票關閉。 –
出參數作爲一個對象的引用,當你傳遞值時,你必須將'out'放在值的前面,並且返回從函數返回值,這將有助於你理解'out',然後再問一個關於這個問題的問題 –
@Simon:還有其他原因要關閉,但是*表現差異......如果你看起來真的非常努力並且眯起眼睛。 – JasonS