素数を見つける次のコードは、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 ミリ秒
- ルク: 1300 ミリ秒
stopIndex @ 20k
- ACF: 1000 ミリ秒
- ルク: 4800 ミリ秒
stopIndex @ 30k
- ACF: 2200 ミリ秒
- ルク: 10500 ミリ秒
trycf.com
とcflive.net
同様のギャップを示します。
cfscript (対タグ) が時間に影響を与えるかどうかを確認しましたが、影響はありません。CFML エンジン関連のサーバー設定も、顕著な影響を与えていないようです。
パフォーマンスの違いの理由は何でしょうか?
そして、どうすればこれを解決できますか?
背景: 実稼働サーバーで重い数学演算 (ジオメトリ、画像レンダリング) を実行していますが、たまたま Lucee が実行されていて、パフォーマンスが遅いことに気付きました。