10

我想知道,就性能和内存使用而言,哪种方式更好?

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

4

5 回答 5

15

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

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

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

于 2012-12-02T09:47:30.113 回答
4

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

于 2012-12-02T09:45:03.383 回答
2

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

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

于 2012-12-02T09:46:58.303 回答
0

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

于 2012-12-02T09:46:25.797 回答
0

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

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

一般来说,最小化方法参数是“一件好事”,但可能会施加依赖关系,因此更多的是关于您的数据结构和代码。

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

于 2012-12-02T09:49:24.580 回答