gpt4 book ai didi

c# - 为什么这个不能优化?

转载 作者:太空狗 更新时间:2023-10-30 00:22:37 25 4
gpt4 key购买 nike

我有一个用于添加向量的函数,如下所示:

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 时进行优化。我发现它确实导致了两个方法调用,因为我通过复制 AddVector 的代码以及“+”和“*”中的点积方法,设法在性能上获得了 10% ' 运算符重载方法。当然,这是一个小众案例,因为它们每秒被调用数万次,但我没想到会这样。我想我希望该方法内联在另一个或其他东西中。我想这不仅仅是方法调用的开销,还有将方法参数复制到另一个方法(它们是结构)的过程。

这没什么大不了的,我可以只复制代码(或者可能只是删除 AddVector 方法,因为我从不直接调用它)但是将来当我决定为某些东西创建一个方法时它会唠叨我很多,比如将一个大方法拆分成几个较小的方法。

最佳答案

如果您编译到 Debug模式或在附加调试器的情况下开始该过程(尽管您可以稍后添加一个),那么一大类 JIT 优化(包括内联)将不会发生。

尝试通过在 Release模式下编译它来重新运行您的测试,然后在没有附加调试器的情况下运行它(在 VS 中按 Ctrl+F5),看看您是否看到预期的优化。

关于c# - 为什么这个不能优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/504403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com