2009-01-06 24 views

Odpowiedz

13

Perl jest dostarczany z modułem Benchmark, który może pobrać kilka próbek kodu i odpowiedzieć na pytanie "który z nich jest szybszy?". Mam Perl Tip na Benchmarking Basics, i choć nie używają wyrażeń regularnych jako takich, daje szybkie i użyteczne wprowadzenie do tematu, wraz z dalszymi odniesieniami.

Brian d foy ma także doskonały rozdział na temat benchmarkingu w swojej książce Mastering Perl. Był na tyle uprzejmy, aby umieścić chapter on-line as a draft, co jest warte przeczytania. Naprawdę nie mogę tego wystarczająco polecić.

Paul

+0

Oprócz rozdziałów Benchmarking i Profiling, zapoznaj się z rozdziałem regex dla niektórych narzędzi. –

+0

perl -Mre = debug/use re 'debug'; –

0

Moim preferowanym sposobem byłoby mieć duży zestaw danych wejściowych do RE, a następnie przetwarzać te dane N razy (np. 100 000), aby zobaczyć, jak długo to trwa.

Następnie dostosuj RE i spróbuj ponownie (zachowaj wszystkie stare RE jako komentarze na wypadek, gdybyś musiał je ponownie sprawdzić w przyszłości, kto wie, jakie cudowne optymalizacje mogą pojawić się w Perlu 7?).

Mogą istnieć narzędzia, które mogą analizować RE, aby podać ścieżki wykonania dla konkretnych danych wejściowych (takich jak narzędzia analityczne w DBMS), ale ponieważ Perl jest językiem leniwych (przykazanie wydane przez samego Larry'ego), Nie mogłem się doczekać, kiedy go znajdę :-).

3

Wystarczy powiedzieć "użyj benchmark" moduł naprawdę nie odpowiedzieć na pytanie, choć. Benchmarking regex różni się od porównywania wyników obliczeń; potrzebujesz dużej ilości realistycznych danych, abyś mógł zaakcentować wyrażenie regularne, tak jak prawdziwe dane. Jeśli większość danych będzie pasować, potrzebujesz wyrażeń regularnych dopasowanych szybko; jeśli większość zakończy się niepowodzeniem, potrzebujesz wyrażeń regularnych, które szybko zawiodą. Mogliby skończyć będąc tym samym regexem, ale może nie.