2011-08-05 18 views
4

私は理解できません。なぜ、listFindNoCase()ListFind()を使ってORとIS/EQの比較を行うのが好ましいのでしょうか?文字列のトークン化に対処しなければならない関数呼び出しを作成するのではなく、JVMが最適化して効率的なコードを生成できるのだろうか?あるいは、CFがもっと効率の悪いことをやっているのですか?なぜCFでlistFindNoCase()とlistFind()が "はるかに高速"なので単純なOR/ISですか?

代わりされ、またはオペレータ の使用listFindNoCase()又はlistFind()複数のアイテム1つのアイテムを比較します。彼らははるかに高速です。

http://www.adobe.com/devnet/coldfusion/articles/coldfusion_performance.html

答えて

11

答えは簡単です:タイプ変換。 2 EQ "2"またはnow()EQ "2011-01-01"、または真のEQ "YES"を比較することができます。複数のタイプに変換して比較するコストはかなり高いです。

ListFind()は複数のコンバージョンを試す必要がないため、はるかに高速です。

これは動的タイピングの価格です。

+0

x = "YES"かつy = "TRUE"の場合、x IS y - > Trueですが、listFind(x、y) - > Falseです。良い! – Henry

1

私も、これは奇妙見つけます。私が考えることができるのは、要素が含まれている要素のいくつかの素晴らしいハッシュに基づいて要素が存在するかどうかをチェックする高速コレクションにリスト要素が追加されていることだけです。これは実際には、大規模または非常に大きなリストの方が高速です。小さいリストには速度の向上がほとんどまたはまったくないはずです。

関連する問題