2012-07-11 61 views
7

假設我有一個大對象,它包含我需要的屬性,另外還有幾個方法和一些相當大的集合。傳遞一個大的現有對象或創建並傳遞一個小對象

我想知道什麼會花費更多:將作爲參數傳遞這個已經存在的大對象,或創建一個小對象,只包含我需要的少數屬性並傳遞它?

回答

14

如果你只是將它作爲參數傳遞給方法,傳遞「big」對象是「便宜」 - 你只會傳遞一個對象引用的副本,它只是一個指針的大小(除非對象是結構類型,在這種情況下,整個「對象」被複制到堆棧中)。如果你要創建一個新的對象,即使它很小,你也要付出分配的代價,並將屬性複製到它上面,如果你傳遞了「大」對象,你就沒有這個價值。

如果您以需要序列化的方式傳遞它(即跨應用程序,調用Web服務等),然後讓小對象(本質上是DTO,數據傳輸對象)是優選的。

+0

謝謝卡洛斯。很高興知道。 – Steve 2012-07-11 22:28:57

2

只要你通過引用傳遞它並不重要。因此你不應該引入額外的複雜性。實際上,這會讓機器花費更多,因爲它然後也必須創建該容器對象。

因爲您似乎關注性能,所以我建議您學習指針和內存管理在C中的工作原理。一旦理解了這一點,您將更容易理解高級語言的抽象版本如何影響性能。