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

时间:2010-08-17 11:35:12

标签: c# oop

  

可能重复:
  Pass by value vs Pass by reference performance C#.net
  

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

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

2 个答案:

答案 0 :(得分:17)

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

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

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

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

答案 1 :(得分:3)

C#

中有值类型和引用类型

对于引用类型,在没有ref关键字的情况下传递它们意味着传递引用。我没有测试它,但我希望编译器和.NET框架的实现者尽可能快地传递它们。我无法想象传递对这些引用的引用要比首先传递引用更快。这没有意义。

在价值类型的情况下,这是另一个故事。如果结构很大,那么复制它肯定是昂贵的,并且传递引用应该更快。但是值类型由于某种原因而被认为是值类型。如果你有一个值类型,你担心将它传递给函数的效率,很可能你犯了一个错误,使它成为一个值类型。