是否有人已经测试过通过引用传递参数是否明显快于复制它们?
但问题的主要焦点是:使用ref关键字与不使用它有相反的缺点吗?
答案 0 :(得分:17)
不,它不会显着提高速度,或者根本不会提高速度。相反,通过使用ref
关键字,您将添加另一个间接级别,这只会使代码变慢。
参数通常按值传递,这意味着它们被复制。对于像int
这样的简单值,它只是意味着将值的副本放在堆栈上。
对于像string
这样的引用类型,它意味着引用的副本放在堆栈上。因此,它并不意味着整个对象被复制,它只是对复制对象的引用。
除非有特殊原因,否则您通常不应使用ref
或out
个关键字。
答案 1 :(得分:3)
C#
中有值类型和引用类型对于引用类型,在没有ref
关键字的情况下传递它们意味着传递引用。我没有测试它,但我希望编译器和.NET框架的实现者尽可能快地传递它们。我无法想象传递对这些引用的引用要比首先传递引用更快。这没有意义。
在价值类型的情况下,这是另一个故事。如果结构很大,那么复制它肯定是昂贵的,并且传递引用应该更快。但是值类型由于某种原因而被认为是值类型。如果你有一个值类型和,你担心将它传递给函数的效率,很可能你犯了一个错误,使它成为一个值类型。