我最近遇到了ref和这个参数关键字,我找不到任何好的比较性能。
void main()
{
int original = 1;
/* Which one is best? */
original = DoMaths(original, 2);
DoMaths(ref original, 2);
original = original.DoMaths(2);
}
int DoMaths(int original, int arg)
{
return original * arg;
}
void DoMaths(ref int original, int arg)
{
original *= arg;
}
int DoMaths(this int original, int arg)
{
return original * arg;
}
答案 0 :(得分:0)
我最近遇到过ref和这个参数关键字,我无法找到明智的比较性能
您没有找到好的比较,因为无法进行有意义的比较。
代码示例中使用的this
关键字对运行时性能的影响确实 no 。它严格地是向编译器发信号的标记,即声明的方法是扩展方法。您发布的代码甚至无法编译(扩展方法必须为static
,并且它们仅在同样为static
的类中合法),但是当它们被正确声明和使用时,它们只影响代码的编译时语义,允许您将调用写入方法,就好像它是使用第一个参数调用的实例方法(标有this
)
否则,它与调用任何其他static
方法完全相同,并且具有完全相同的性能特征。并且比较static
方法与使用by-reference参数(通过ref
或out
)的方法之间的性能也毫无意义。这两者甚至不是相互排斥的。
即使你想到一个问题,比较使用ref
与其他一些其他可比较方案的问题,其他人通常也无法以有用的方式回答这个问题,尤其是没有{{3这清楚地说明了这个问题。即使有这样的例子,也不太可能得到有用的答案,因为这样的代码示例必然与现实世界的背景分离,其中实际的性能可能是一个问题。即任何答案都主要是学术价值。
在这样的论坛中,对于一个问题的最佳和唯一合理的答案采取"哪些表现更好?"是"当你在现实场景中测试它时表现更好?"
最后,请注意,通过引用传递会显着改变方法的语义。因此,即使在性能受到关注的情况下,即使实际发生通过引用提高了性能,也应该非常谨慎地将ref
仅用作性能增强措施。单个方法调用是一个重要的性能瓶颈是非常罕见的,与语义正确的实现相比,通过引用传递可能产生足够显着的性能差异,以证明损害代码的表达能力是不太可能的。那样。