传递一个大的现有对象或创建并传递一个小对象

时间:2012-07-11 03:53:54

标签: c#

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

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

2 个答案:

答案 0 :(得分:14)

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

如果你以一种需要序列化的方式传递它(即跨应用程序,在调用Web服务等等),那么拥有较小的对象(本质上是DTO,数据传输对象)是首选。

答案 1 :(得分:2)

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

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