Thread Performanteste ord()-Lösung gesucht
(31 answers)
Opened by bianca at 2019-07-08 08:05
Ein Ex-Kollege sagte mal: "Kannst Du's nicht messen, dann kannst Du's vergessen."
Messen können wir. Das Resultat: Code: (dl
)
1 Benchmark: timing 10000 iterations of daxim, gwen , muffi,... Das sind schon merkliche Unterschiede zwischen den Alternativen! Der komplette Code: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 use 5.020; use List::AllUtils qw(first); use Encode; use utf8; use Benchmark ':hireswallclock'; sub daxim { my $string_of_characters = shift; first { $_ gt "\xff" } split //, $string_of_characters; } sub muffi { my $str = shift; $str !~ /^[\x{00}-\x{ff}]*$/; } sub GwenDragon { my $string = shift; scalar grep /[^\0-\x{ff}]/, $string; } my $string = 'a' x 10000 . '€'; say "daxim: ", encode('UTF-8',daxim($string)); say "muffi: ", muffi($string); say "GwenDragon: ", GwenDragon($string); timethese(10000, {'daxim' => sub { daxim($string) }, 'muffi' => sub { muffi($string) }, 'gwen ' => sub { GwenDragon($string) }, }, ); Eine kleine Korrektur habe ich vorgenommen: Bei GwenDragon's Methode muss \0 anstelle von 0 rein, sonst verpasst Du die versammelten Satzzeichen. Der Unterschied wird - in der gleichen Reihenfolge - noch deutlicher, wenn der String entweder kein Zeichen >255 enthält, oder wenn das Zeichen >255 an früherer Stelle auftritt. |