我有一个用于添加向量的函数,如下所示:
public static Vector AddVector(Vector v1, Vector v2)
{
return new Vector(
v1.X + v2.X,
v1.Y + v2.Y,
v1.Z + v2.Z);
}
不是很有趣。但是,我为向量重载了“+”运算符,并在重载中调用了 AddVector 函数以避免代码重复。我很好奇这是否会导致两个方法调用,或者是否会在编译或 JIT 时进行优化。我发现它确实导致了两次方法调用,因为我总共获得了 10 %通过复制 AddVector 的代码以及 '+' 和 '*' 运算符重载方法中的点积方法来提高性能。当然,这是一个小众案例,因为它们每秒被调用数万次,但我没想到会这样。我想我希望该方法被内联到另一个或其他东西中。而且我认为这不仅仅是方法调用的开销,还有将方法参数复制到另一个方法(它们是结构)中。
没什么大不了的,我可以复制代码(或者可能只是删除 AddVector 方法,因为我从不直接调用它)但是当我决定为某事创建一个方法时,它会在未来困扰我很多,比如拆分一个大方法分成几个小方法。