我正在使用3D视口处理应用程序,该视口每秒刷新30次(或者至少尝试快速渲染)。不幸的是,代码很复杂,只需将其转换为测试性能效果就需要一段时间,但我要比较的两个条件如下:
ObjectToRender p = objectsToRender.get(i);
p.render();
而不是:
objectsToRender.get(i).render();
我确信这听起来像是一个严重的微优化案例,但是,如上所述,此代码不断被调用,并且没有外部因素影响其性能(磁盘I / O,网络等)。 / p>
答案 0 :(得分:7)
我希望这两段代码能够JIT编译成完全相同的机器代码,假设你在这个片段之后的任何地方都不使用“p”。
答案 1 :(得分:2)
应该没有什么区别,但我看到了性能差异,我认为我不应该看到它。
正如您所说,它似乎是一种微优化,您可能会通过寻找更大的优化(例如代码重构或甚至使用不同的图形工具包)来获得更多的优势。
如果您关心帧速率,则应显示或记录帧速率,并为给定的预编程测试设置一些标准化目标。完成此操作后,测试较小的更改应该会立即给出有关各种调整的反馈。
如果没有测量它们的能力,请不要进行“性能增强”。这就像你迷路了,并建议将你的行驶速度提高到40英里/小时以上,因为你没有时间停下来询问方向。
答案 2 :(得分:1)
大多数现代编译器足够智能,可以生成非常优化的字节码。我怀疑上述2个电话应该有所不同。实际上,它们会产生相同的字节代码。
答案 3 :(得分:0)
您建议的更改不应该是重要的,尽管您可能会从基于索引的列表访问(我假设您正在使用“get(i)”)转移到阵列访问时获得改进。
答案 4 :(得分:0)
可以使用迭代器循环遍历所有要呈现的对象来优化代码的objectsToRender.get(i)
部分:
iterator.next().render();
或者,如果对象列表稳定,则将其转换为ObjectToRender[]
一次并直接索引:
objectsToRender[i].render();