7

假设我有一个大对象,其中包含我需要的属性以及几个方法和一些相当大的集合。

我想知道什么会花费更多:将这个已经存在的大对象作为参数传递,或者创建一个只包含我需要的少数属性的小对象并传递它?

4

2 回答 2

15

如果您只是将它作为参数传递给方法,则传递“大”对象会“更便宜” - 您只会传递对象引用的副本,它只是指针的大小(除非对象是结构类型,在这种情况下,整个“对象”被复制到堆栈中)。如果您要创建一个新对象,即使它很小,您也会付出分配和复制属性到它的代价,而如果您传递“大”对象,您就没有这些代价。

如果您以需要对其进行序列化的方式传递它(即,跨应用程序、在对 Web 服务的调用中等),那么最好使用较小的对象(本质上是一个 DTO,数据传输对象)。

于 2012-07-11T03:57:59.857 回答
2

只要您通过引用传递就没有关系。因此,您不应该引入额外的复杂性。事实上,这会使机器花费更多,因为它还必须创建该容器对象。

由于您似乎关心性能,我建议您了解指针和内存管理在 C 中的工作原理。一旦您理解了这一点,您将更容易理解它们在高级语言中的抽象版本如何影响性能。

于 2012-07-11T03:59:02.900 回答