以下用于查找素数的代码在 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>
停止索引@10k
- ACF:280 毫秒
- LUC:1300 毫秒
停止索引 @ 20k
- ACF:1000 毫秒
- LUC:4800 毫秒
停止索引 @ 30k
- ACF:2200 毫秒
- LUC:10500 毫秒
trycf.com
并cflive.net
显示出类似的差距。
我检查了cfscript(与标签)是否对时间有影响,但没有。CFML 引擎相关的服务器设置似乎也没有任何明显的影响。
性能差异的原因可能是什么?
我怎么可能解决这个问题?
背景:我正在生产服务器上运行繁重的数学运算(几何、图像渲染)),而该服务器恰好正在运行 Lucee,并注意到性能缓慢。