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

时间:2012-12-02 09:40:05

标签: c# performance function memory-management parameters

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

仅传递特定函数所需的参数或相同的函数来传递具有30个属性的对象,但该函数将使用其中的3个属性?

5 个答案:

答案 0 :(得分:10)

您不应该根据表现来决定这一点。性能差异很小,可以忽略不计。 (但要回答你的问题,如果对象是reference type,则传递对象会更快;如果大对象是value type,则传递参数会更快。)

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果是传递对象的本地操作更好,因为它只是参考。但是,如果你想通过网络传递对象,那么你的对象将被整个序列化并且尺寸很大

答案 4 :(得分:0)

这可能取决于很多因素......

  • 例如,3个属性是引用类型还是值类型 - C#是“按值传递”语言,对于值类型,它在每个赋值或参数传递期间复制整个对象,但对于引用类型,它只复制引用,不是整个对象。
  • 性能几乎相同(再次唯一的区别是复制值/引用),除非某些属性例如延迟评估/创建

通常,最小化方法参数是“一件好事”,但可能会产生依赖关系,因此它更多地是关于您的数据结构和代码。

还要记住,通常性能是最不重要的代码度量标准之一,因此请避免过早优化,并更多地关注代码的含义,可读性和可维护性。如果你遇到性能问题,我怀疑这将成为瓶颈。