Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 传递一个大的现有对象或创建并传递一个小对象_C# - Fatal编程技术网

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

C# 传递一个大的现有对象或创建并传递一个小对象,c#,C#,假设我有一个大对象,它包含我需要的属性,另外还有几个方法和几个相当大的集合 我想知道花费更多的是什么:将这个已经存在的大对象作为参数传递,还是创建一个只包含我需要的少数属性的小对象并传递它?如果您只是将它作为参数传递给一个方法,传递“大”对象“更便宜”-您将只传递对象引用的一个副本,该副本的大小与指针的大小相同(除非该对象是结构类型,在这种情况下,整个“对象”被复制到堆栈中)。如果要创建一个新对象,即使它很小,也要付出分配和复制属性的代价,如果传递“大”对象,这是不可能的 如果您以需要序列化的方

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


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

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


如果您以需要序列化的方式传递它(例如,跨应用程序,在对web服务的调用中,等等),那么最好使用较小的对象(基本上是DTO,数据传输对象)。

只要您通过引用传递就行了。因此,您不应该引入额外的复杂性。事实上,这会增加机器的成本,因为它还必须创建容器对象

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