【问题标题】:C# - Passing 3 parameters vs passing object with 30 properties -C# - 传递 3 个参数与传递具有 30 个属性的对象 -
【发布时间】:2012-11-20 00:32:14
【问题描述】:

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

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

【问题讨论】:

  • 如果您的函数只使用 3 个变量,为什么要传递所有内容?对您的设计做一些事情,而不是担心性能。

标签: c# performance function memory-management parameters


【解决方案1】:

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

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

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

【讨论】:

  • 我知道这是一个旧答案,但我非常感谢您进一步详细说明该方法在逻辑上与该方法相关,反之亦然。谢谢!
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-28
          • 2019-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多