【发布时间】:2010-08-17 11:35:11
【问题描述】:
是否有人已经测试过通过引用传递参数是否比复制它们快得多?
但问题的主要焦点是:使用 ref 关键字与不使用它相比有什么缺点吗?
【问题讨论】:
-
这是旧工具,但谢谢
是否有人已经测试过通过引用传递参数是否比复制它们快得多?
但问题的主要焦点是:使用 ref 关键字与不使用它相比有什么缺点吗?
【问题讨论】:
不,它不会显着提高速度,或者根本不会。相反,通过使用ref 关键字,您添加了另一层间接性,这只会使代码变慢。
参数通常是按值传递的,这意味着它们是被复制的。对于像int 这样的简单值,它只是意味着将值的副本放在堆栈上。
对于像string 这样的引用类型,这意味着引用的副本放在堆栈上。因此,这并不意味着复制了整个对象,而只是复制了对对象的引用。
您通常不应使用 ref 或 out 关键字,除非有特殊原因。
【讨论】:
string参数时只传递引用,那么在更改传递时如何不改变原始变量?内存中必须有一个新的字符串副本(或者我错了吗?)。如果我正在处理(或解析,但不改变)非常大的字符串,通过ref 传递它会不会更快?谢谢你的解释:)。
C#中有值类型和引用类型
在引用类型的情况下,不带ref 关键字传递它们意味着传递引用。我没有测试它,但我希望编译器和 .NET 框架的实现者尽可能快地传递它们。我无法想象传递对这些引用的引用比传递引用要快。这没有意义。
对于值类型,情况就另当别论了。如果一个结构很大,复制它肯定会很昂贵,并且传递引用应该更快。但是值类型是值类型是有原因的。如果你有一个值类型并且你担心将它传递给函数的效率,很可能你把它当作一个值类型是错误的。
【讨论】: