傳遞一個類/結構vs傳遞幾個參數傳遞一個類/結構vs傳遞幾個參數
我想知道性能方面的考慮。
它會更好性能代價通入一個方法調用類或結構(其?)保持兩個int參數和一個對象引用,或倒不如通過這三個作爲三個參數?
注: 我開發的Unity3D的平臺上,因此它可能有些事情的工作方式不同,則經典的.NET
傳遞一個類/結構vs傳遞幾個參數傳遞一個類/結構vs傳遞幾個參數
我想知道性能方面的考慮。
它會更好性能代價通入一個方法調用類或結構(其?)保持兩個int參數和一個對象引用,或倒不如通過這三個作爲三個參數?
注: 我開發的Unity3D的平臺上,因此它可能有些事情的工作方式不同,則經典的.NET
如果傳遞class
,那麼你需要做的第一件事就是創建一個對象,稍後需要垃圾收集。通常情況下不是問題,但在某些Unity目標平臺上可能不合需要如果您正在執行此操作。
如果您通過struct
正常,那麼它需要複製結構。如果它足夠大,可以提出關於封裝的問題(即代表不止一個參數),那麼它可能非常不重要,並且可能會非常痛苦地複製整個時間,特別是如果傳遞幾層。
傳遞個別參數是衆所周知的,不應該引起巨大的問題。 4.0中的可選參數可以使添加更多參數更簡單,但是它們仍然通過(僅使用它們的默認值)。
團結一個有趣的選擇行經struct
由參,因爲這不複製的內容(它只是傳遞給你創造的價值的參考,一般在棧中),和不要求任何垃圾收集,即
var args = new SomeArgs(123, "abc", 23.4F, false); // <=== a struct
SomeMethod(ref args);
然而,在最有用的情況下,我不能看到這你獲得過很多剛剛
SomeMethod(123, "abc", 23.4F, false);
除非您將參數向下傳遞幾層 - 在這種情況下,它具有不需要任何複製的優點。但要小心:調用堆棧中的值不再獨立(常規參數,不通過ref
,與方法分離)。
我認爲至少介紹了一些事情考慮,但我沒有給你一個定論。如果你想要更科學的東西,你可能需要測量。
它取決於有多少參數。
如果您有10個參數,對其進行管理將非常困難(可讀性和代碼管理透視圖)。將所有這些參數放入課堂並通過該課程將是明智的。
性能觀點它會增加一點開銷,但它的價值不是傳遞所有這些參數。
如果你只傳遞對象類型數據,你可以嘗試使用params。
public static void myMethod(params object[] list)
{
// do something
}
您可以傳遞任意數量的參數。
如果性能是你的擔心,那麼你應該去尋找結構。與類相比,結構是輕量級的,它揹負着大量的數據結構。
如果真的很重要,請測量它。否則不要打擾。 – jeroenh