misc.log

日常茶飯事とお仕事と

空文字比較と文字長ゼロ比較の速度差

取得した文字列がカラッポであるかどうかの判定なんてのは業務処理でありがちな判断文ですが、これもちょっとしたコツで速度差が大きくでます。まず、最初に「トリムした文字列が空文字(String.Empty)でないことの判定」を見てみましょう。



約9,000μセカンドです。一方で、「トリムした文字列の長さがゼロでないことの判定」を見てみましょう。これらが処理的には同じ結論に至ることは判りますよね?



約100μセカンド。90倍の速度差があります。ちょっとした速度差ですが、大量に繰り返されると体感できる速度差の原因になりますので注意が必要です。


で、上記の結果でもう1つ判ることが。If文の条件式で行われているトリムを、条件がTrueの場合のIf文内で再度行っています。素直に考えると、トリム処理が2回行われる可能性がありそうに思えますが、内部の処理に掛かっている時間は2μセカンドにも満たない時間です。ということは……恐らくコンパイラが「条件式の中で登場したトリム結果」と「Trueの時のトリム結果」が同じものであると判断して、最適化してくれているのでしょうか?いずれにせよ、「事前にトリム結果を別の変数に入れる」なんてことは考えなくても良い場合もあるようです(全ての場合にこうなるかどうかは判りません)。