当前位置:  开发笔记 > 编程语言 > 正文

为什么不能对此进行优化?

如何解决《为什么不能对此进行优化?》经验,为你挑选了1个好方法。

我有一个函数,我用来添加向量,像这样:

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方法,因为我从来没有直接调用它)但是当我决定为某些东西创建一个方法时,它将会惹恼我很多,比如分裂一个大方法分成几个较小的方法.



1> ICR..:

如果你编译成调试模式或者在调试器附加的情况下开始进程(虽然你可以稍后添加一个),那么就不会发生大量的JIT优化,包括内联.

尝试通过在发布模式下编译它来重新运行测试,然后在没有调试器的情况下运行它(VS中的Ctrl + F5),看看你是否看到了预期的优化.

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有