2009-08-05
空文字列比較は eq/ne と length のどっちが速いか
最近、空文字列のチェックの際に、面倒臭くて $_ eq '' の代わりに、空文字列だと length が偽を返すことを利用して、自分しか見ないようなソースでは以下のように書くことが多いのですが、
return unless defined and length;
パフォーマンス的には、$_ ne '' と比べてどうなんだろうと思って調べてみました。
#!/usr/bin/perl use strict; use warnings; use Benchmark ':all'; my $empty = ''; my $not_empty = 'blah'; cmpthese(timethese(100000000, { emp_cmp_eq => sub { $empty eq '' }, emp_cmp_ne => sub { $empty ne '' }, emp_len => sub { length $empty }, not_cmp_eq => sub { $not_empty eq '' }, not_cmp_ne => sub { $not_empty ne '' }, not_len => sub { length $not_empty }, }));
結果は以下です。環境は Ubuntu 9.04 の v5.10.0 です。
Benchmark: timing 100000000 iterations of emp_cmp_eq, emp_cmp_ne, emp_len, not_cmp_eq, not_cmp_ne, not_len...
Rate emp_cmp_eq emp_cmp_ne not_cmp_ne not_cmp_eq emp_len not_len
emp_cmp_eq 11976048/s -- -11% -21% -37% -49% -64%
emp_cmp_ne 13422819/s 12% -- -12% -29% -42% -59%
not_cmp_ne 15220700/s 27% 13% -- -20% -35% -54%
not_cmp_eq 18975332/s 58% 41% 25% -- -18% -42%
emp_len 23255814/s 94% 73% 53% 23% -- -29%
not_len 32894737/s 175% 145% 116% 73% 41% --
length の方が速いだろうとは思っていましたが、ここまで差が出たのが予想外でした。以後も積極的に length でチェックしようと思います。
コメントを書く
トラックバック - http://d.hatena.ne.jp/Craftworks/20090805/1249479565
リンク元
- 211 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1330927803438&ved=0CDEQFjAA&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=jVhUT8biNdGSiQfU07TqCw&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw
- 172 https://www.google.co.jp/
- 135 http://www.google.co.jp/url?sa=t&rct=j&q=perl 空文字列&source=web&cd=3&sqi=2&ved=0CDkQFjAC&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=G3GmTtGXKO3smAXez6SuDw&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw
- 101 http://www.google.co.jp/search?q=perl+空文字&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a
- 99 http://www.google.co.jp/url?sa=t&rct=j&q=perl+空文字&source=web&cd=3&ved=0CDsQFjAC&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=18vJTvTTMO3GmQXA_akH&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw
- 93 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDUQFjAB&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=6mtnT-jEFa6OmQWQneyaDQ&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw&sig2=37eUUGIRm18IvQKKsO6Qsg
- 61 http://www.google.co.jp/url?sa=t&rct=j&q=perl 文字列 空&source=web&cd=12&ved=0CDIQFjABOAo&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=d_QTT7qSCs7QmAXDtMysBg&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw
- 57 http://www.google.co.jp/url?sa=t&rct=j&q=perl+文字列+空+判定&source=web&cd=4&ved=0CDwQFjAD&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=BtF6T7byDKr3mAWX7rXiAw&usg=AFQjCNFm33cn8B3sMUF4Cvl
- 37 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=3&sqi=2&ved=0CEEQFjAC&url=http://d.hatena.ne.jp/Craftworks/20090805/1249479565&ei=kWFyT6KsCq7MmAXekMHfDw&usg=AFQjCNFm33cn8B3sMUF4CvlU5oCKyy-zkw
- 33 http://reader.livedoor.com/reader/


