【问题标题】:Are methods faster when parameters are referenced? [duplicate]引用参数时方法是否更快? [复制]
【发布时间】:2013-05-14 05:16:39
【问题描述】:

有时,我会得到一些辅助方法,例如:

private string generateReport(string doc, List<string> sheets, Blah blahblah)
{
    //doStuff()
}

在我的代码中看到很多这样的内容让我怀疑我是否在弄乱计算机内存 - 来回抛出参数。在基本层面上,这个问题是通过类级别的变量来解决的,但在某些情况下,我可能是从一个类派生或使用另一个类的辅助方法。所以我的问题是:

使用引用是更好的选择吗?即

private string generateReport(ref string doc, ref List<string> sheets, ref Blah blahblah)
{
    //doStuff()
}

我什么时候应该不使用它(如果适用)?

谢谢。

【问题讨论】:

  • 什么能让你更快吃巧克力:我递给你一盒巧克力,你打开盒子吃巧克力,或者我递给你一张纸,上面有如何找到一盒巧克力的说明巧克力,你按照说明,找到盒子吃巧克力吗?没有理由认为添加间接性 会使操作更快。添加间接级别会使操作变慢;可能长达几纳秒。
  • @EricLippert:好吧,如果它是一大盒巧克力,那么我去找它而不是让你带来它可能会更快......尽管如果你愿意,我当然仍然会很感激后者做到了;)
  • @Mehrdad:对;但这就是结构应该很小的原因。
  • @EricLippert:是的......然后一个Matrix 结构出现并破坏了聚会。 :(
  • @rtuner:不,我说的和那个答案一样——对于引用类型和值类型,ByVal 通常更快。 ByRef 只对某些值类型更快,而对引用类型永远不会。

标签: c# reference


【解决方案1】:

直接的答案是否定的。 请看这个问题和答案: Which is faster? ByVal or ByRef?

还请记住,通过引用传递首先应该是一种设计选择。通过引用传递声明对参数所做的任何更改都将直接影响所提供的变量。仅当您想要返回多个参数时才应使用此选项,如果您正在寻找上述行为。

最后,如果您的代码处理量不大,则不应专注于进行非常小的性能改进,而应专注于可读性和稳定性。

【讨论】:

  • 如果你要返回多个值,首选out而不是ref。
  • 如果要返回多个值,最好选择复合返回类型。
【解决方案2】:

不——“通过引用传递”实际上会传递一个引用,在 32 位系统上是 4 个字节。

因此,如果您的变量与引用一样大(或小于),那么它肯定不会更快 - 可能会慢一点。

否则,它只取决于您的变量有多大——它可能更快或更慢,具体取决于代码。

【讨论】:

  • 我想这就是我一直在寻找的答案。谢谢
  • 嗯,这看起来像是一个重复的问题。我应该删除吗?
  • @rtuner:我不认为你可以自己做——但你可以标记让版主删除它。
  • 哦,好的。谢谢。 OMG,API 监视器!!?哇。我是那个的超级粉丝!你在 IRC 上吗?
  • @rtuner:不,我不是哈哈。
猜你喜欢
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2019-02-21
  • 1970-01-01
  • 2021-07-23
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多