日本語Windows上で2つの文字列型変数(S1、S2)の内容が
「全く同一かどうか」を判断したいとき、
(1) if S1 = S2 then
(2) if AnsiSameStr(S1, S2) then
のどちらを使う方がよいのでしょうか?
よろしくお願いします。
んじゃあってんで試してみました。
おんぷむらのうらのDebugUnitを用いた、デバッグメモ帳への出力です。
var
i : Integer;
S1, S2: String;
b : Boolean;
begin
S1 := 'たかみちえ';
S2 := 'http://Onpu.jpn.ch/';
DebugBeginTimer('S1 eq S2');
for i := 0 to 1000000 do
b := S1 = S2;
DebugEndTimer('S1 eq S2');
DebugBeginTimer('AnsiSameStr(S1, S2)');
for i := 0 to 1000000 do
b := AnsiSameStr(S1, S2);
DebugEndTimer('AnsiSameStr(S1, S2)');
end;
デバッグメモ帳への出力結果は以下のとおりでした。
OSバージョン WinNT 5.1.2600 Service Pack 1
----------------------------------------------------------------------S1 eq S2 = 33ms
AnsiSameStr(S1, S2) = 872ms
ロケール制御が入ってるからかどうか知りませんが、
素直に演算子を使えるとこは演算子を使いましょう。
ちゃんちゃん。
ああ、改行がずれてしまいました^^;
S1 eq S2 としてるのは、S1 = S2 がデバッグタイマ名に使えないから(内部でTStringListを使ってるから)です。
ちなみに、処理の順番を逆に(2->1)にしてみましたけど、
AnsiSameStr(S1, S2) = 961ms
S1 eq S2 = 42ms
と、比率はあんまり変わりありませんでした。
メモ帳への転送時間などで多少の時間のずれはあると思いますが、こんなとこでいいでしょう。
たかみちえさん、ご回答ありがとうございました。
処理に掛かる時間がずいぶん違うのですね。
びっくりしました。
> 素直に演算子を使えるとこは演算子を使いましょう。
はい、そうします!
ツイート | ![]() |