以下代码用于查找质数,但Adobe ColdFusion(10)和Lucee(4.5)在性能方面存在很大差异。 在相同的机器上进行测试(6C i7 3930k @ 4 GHz,Windows 10 64位,两个CFML引擎的JVM内存设置相等:JDK7 -Xms512m -Xmx2048m -XX:MaxPermSize=512m
):
<cfscript>
ticks = getTickCount();
stopIndex = 10000;
primes = [];
divisions = 0;
primes.add(2);
primes.add(3);
n = 5;
for (n; n < stopIndex; n += 2) {
isPrime = true;
d = 3;
for (d; d < n; d++) {
divisions++;
if (n % d == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
primes.add(n);
}
}
ticks = (getTickCount() - ticks);
</cfscript>
<cfoutput>
<p>
#numberFormat(divisions)# divisions in #ticks# ms.
</p>
<p>
#numberFormat(arrayLen(primes))# prime numbers found below #numberFormat(stopIndex)#.
</p>
</cfoutput>
stopIndex @ 10k
- ACF: 280毫秒
- LUC: 1300毫秒
stopIndex @ 20k
- ACF: 1000毫秒
- LUC: 4800毫秒
stopIndex @ 30k
- ACF: 2200毫秒
- LUC: 10500毫秒
trycf.com
和 cflive.net
显示了类似的差距。
我检查了 cfscript(与标签相比)对时间有影响吗?没有。CFML 引擎相关的服务器设置似乎也没有任何明显的影响。
性能差异的原因可能是什么?
我如何可能解决这个问题?
背景:我在生产服务器上运行重型数学操作(几何、图像渲染),该服务器恰好运行 Lucee,并注意到性能低下。