2012-06-04 65 views
3

傳遞一個類/結構vs傳遞幾個參數傳遞一個類/結構vs傳遞幾個參數

我想知道性能方面的考慮。

它會更好性能代價通入一個方法調用類或結構(其?)保持兩個int參數和一個對象引用,或倒不如通過這三個作爲三個參數?

注: 我開發的Unity3D的平臺上,因此它可能有些事情的工作方式不同,則經典的.NET

+2

如果真的很重要,請測量它。否則不要打擾。 – jeroenh

回答

7

如果傳遞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,與方法分離)。

認爲至少介紹了一些事情考慮,但我沒有給你一個定論。如果你想要更科學的東西,你可能需要測量。

+0

數據僅通過一個級別。 所以基本上,我需要創建一個新的結構,用參數構建到方法調用中,然後在方法中,這是一個事件,我將訪問這些參數。 – gStation

+0

@gStation我只是將它們作爲參數傳遞,然後假設它們沒有質量 –

+0

它只是這3個參數(枚舉,int,對象) – gStation

1

它取決於有多少參數。

如果您有10個參數,對其進行管理將非常困難(可讀性和代碼管理透視圖)。將所有這些參數放入課堂並通過該課程將是明智的。

性能觀點它會增加一點開銷,但它的價值不是傳遞所有這些參數。

0

如果你只傳遞對象類型數據,你可以嘗試使用params。

public static void myMethod(params object[] list) 
    { 
     // do something 
    } 

您可以傳遞任意數量的參數。

0

如果性能是你的擔心,那麼你應該去尋找結構。與類相比,結構是輕量級的,它揹負着大量的數據結構。