即时编译(调试模式)的运行速度可能比即时编译(发布模式)快。对于Dart来说,这似乎是一个已知问题。
,
优化编译器中有一个疏忽之处,使它的速度慢于应有的速度。我已提交an issue进行修复。
问题在于,当内联ByteData
方法来写入8、16和32位整数时,AOT编译器会发出一些不必要的推测性代码。如果以后无法证明其推测成立,则最终会生成很多较差的代码。从某种意义上说,这是飞镖赛之前留下的2倍。
我们将在编译器中修复它。但是,您也可以通过对这些方法的参数进行显式屏蔽来解决此问题。例如,如果您像这样重写基准测试的核心
buffer.setInt32(offset,intContent & 0xFFFFFFFF); offset += 4; intContent++;
buffer.setInt32(offset,intContent & 0xFFFFFFFF); offset += 4; intContent++;
buffer.setInt16(offset,intContent & 0xFFFF); offset += 2; intContent++;
buffer.setInt16(offset,intContent & 0xFFFF); offset += 2; intContent++;
buffer.setInt8(offset,intContent & 0xFF); offset += 1; intContent++;
buffer.setInt8(offset,intContent & 0xFF); offset += 1; intContent++;
它将显着提高基准性能。尽管释放和调试模式(2-3x)之间仍然会有一些差异,因为生成的AOT代码中仍然存在优化机会。
本文链接:https://www.f2er.com/3168185.html