通过引用传递值是否显着提高了速度?

Fab*_*iro 7 c# oop

可能重复:
按值传递值与传递参考性能C#.net

是否有人已经测试过通过引用传递参数是否明显快于复制它们?

但问题的主要焦点是:使用ref关键字与不使用它相反是否有任何缺点?

Guf*_*ffa 17

不,它不会显着提高速度,或者根本没有提高速度.相反,通过使用ref关键字,您将添加另一级别的间接,这只会使代码变慢.

参数通常按值传递,这意味着它们被复制.对于简单的值int,它只是意味着值的副本放在堆栈上.

对于像这样的引用类型,string它意味着引用的副本放在堆栈上.因此,它并不意味着复制整个对象,而只是对复制对象的引用.

除非有特殊原因,否则通常不应使用refout关键字.

  • 一个小问题:如果您有一个“大”结构,那么通过 ref 传递它可能会稍微提高性能。话虽如此,如果您的结构体太大,以至于通过 val 传递它会明显影响性能,那么您应该认真考虑重构类型本身,而不是通过 ref 传递它。 (2认同)

Mac*_*ehl 5

C#中有值类型和引用类型

对于引用类型,不带ref关键字传递它们意味着传递引用。我没有测试它,但我希望编译器和 .NET 框架的实现者能够尽快通过它们。我无法想象传递对这些引用的引用比首先传递引用更快。这没有道理。

对于值类型来说,则是另一回事了。如果一个结构很大,复制它的成本肯定很高,而传递引用应该更快。但值类型之所以成为值类型是有原因的。如果您有一个值类型并且您担心将其传递给函数的效率,那么很可能您犯了一个错误,使其成为值类型。