Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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#-传递3个参数与传递30个属性的对象-_C#_Performance_Function_Memory Management_Parameters - Fatal编程技术网

C#-传递3个参数与传递30个属性的对象-

C#-传递3个参数与传递30个属性的对象-,c#,performance,function,memory-management,parameters,C#,Performance,Function,Memory Management,Parameters,我想知道,哪种方式在性能和内存使用方面更好 只传递特定函数所需的参数,或者传递具有30个属性的对象也是一样,但函数将使用其中的3个属性?当调用任何非内嵌方法时,作为参数传递的变量将实际复制到被调用方法中的形式参数槽内存中。这会导致堆栈内存操作并导致性能下降。最小化参数更快。如果是本地操作,则传递对象更好,因为它只是引用。但若您想通过网络传递对象,那个么您的对象将是完整序列化的,并且将非常大这完全取决于您是通过值还是引用传递它。 典型参数(int、float、double、bool)都是通过值传递

我想知道,哪种方式在性能和内存使用方面更好


只传递特定函数所需的参数,或者传递具有30个属性的对象也是一样,但函数将使用其中的3个属性?

当调用任何非内嵌方法时,作为参数传递的变量将实际复制到被调用方法中的形式参数槽内存中。这会导致堆栈内存操作并导致性能下降。最小化参数更快。

如果是本地操作,则传递对象更好,因为它只是引用。但若您想通过网络传递对象,那个么您的对象将是完整序列化的,并且将非常大

这完全取决于您是通过值还是引用传递它。 典型参数(int、float、double、bool)都是通过值传递的。意味着它们被复制。 若您传递对象,它只会将指向对象(引用)的指针“发送”到4或8字节长的函数


如果您有那么多参数,传递对象会更有效。

您不应该根据性能来决定这一点。性能差异非常小,可以忽略不计。(但为了回答您的问题,如果对象是a,则传递该对象的速度更快;如果大对象是a,则传递参数的速度更快。)

您应该根据代码的含义来决定这一点。如果该方法在逻辑上与具有30个属性的对象相关,那么该方法获取该对象是有意义的。您可能还想考虑将来对该方法的任何更改是否需要访问更多属性


如果该方法在逻辑上与对象无关,并且传入的三个值只是该方法的信息片段,则应将它们作为单独的参数传入。您还应该考虑将来调用该方法的任何代码是否希望传入与该特定对象的这三个属性不同的值。

这可能取决于许多因素

  • 例如,3个属性是引用类型还是值类型-C#是“按值传递”语言,对于值类型,它在每次赋值或参数传递期间复制整个对象,但对于引用类型,它只复制引用,而不复制整个对象
  • 性能将几乎相同(唯一的区别是复制值/引用),除非某些属性(例如)是延迟评估/创建的
一般来说,最小化方法参数是“一件好事”,但可能会产生依赖关系,所以更多的是关于数据结构和代码


还要记住,性能通常是最不重要的代码指标之一,因此避免过早优化,并更多地关注代码的含义、可读性和可维护性。如果您有性能问题,我怀疑这是否会成为瓶颈。

如果您的函数只使用3个变量,为什么要传递所有变量?对你的设计做点什么,而不是担心性能。我知道这是一个古老的答案,但我非常感谢你进一步阐述你关于方法与方法和相反的逻辑关系的观点。谢谢