Groovy:sum()更有效,使用注入计算总和?

Ale*_*hel 1 groovy

做得[1, 3, 5].sum()明显快[1, 3, 5].inject( 0, {x, y -> x + y}吗?

Opa*_*pal 10

看看以下基准:

@Grab(group='org.gperfutils', module='gbench', version='0.4.3-groovy-2.4')

def b = benchmark {
    'simple-sum' {
        [1, 3, 5].sum()
    }
    'inject-sum' {
        [1, 3, 5].inject(0, { x, y -> x + y })
    }
}
b.prettyPrint()
Run Code Online (Sandbox Code Playgroud)

并输出:

Environment
===========
* Groovy: 2.4.0
* JVM: Java HotSpot(TM) 64-Bit Server VM (25.5-b02, Oracle Corporation)
    * JRE: 1.8.0_05
    * Total Memory: 283.5 MB
    * Maximum Memory: 3641 MB
* OS: Mac OS X (10.10.1, x86_64)

Options
=======
* Warm Up: Auto (- 60 sec)
* CPU Time Measurement: On

            user  system  cpu  real

simple-sum   218       2  220   226
inject-sum   270       2  272   276
Run Code Online (Sandbox Code Playgroud)

输出表明它几乎相同 - sum几乎每次尝试都快一点但差别不大.另外看看如何sum实现.在这种简单的情况下,它可能会更快,但在更高级的情况下,结果可能会被反转.

  • 你还会说,你的下一辆车的20%折扣是微不足道的;)将列表更改为例如(0..10000)我的注入方法的性能提高了35%. (3认同)