Pergunta

Qual é a melhor maneira de perfil Perl expressões regulares para determinar como eles são caros?

Foi útil?

Solução

Perl vem com o módulo Referência , que pode tomar uma série de exemplos de código e resposta a pergunta de "qual é o mais rápido?". Eu tenho um Perl Dica em Aferição Basics , e enquanto isso não utilizar regexps per se, dá uma introdução rápida e útil para o tema, juntamente com ainda mais referências.

brian d foy também tem um excelente capítulo sobre o benchmarking em sua Mastering Perl livro . Ele foi gentil o suficiente para colocar capítulo on-line como um rascunho , que vale bem a pena a leitura. Eu realmente não posso recomendar o suficiente.

Paul

Outras dicas

Apenas dizer "usar o Índice de Referência" módulo realmente não responder à pergunta, no entanto. Aferimento um regex é diferente do que o benchmarking um cálculo; você precisa de uma grande quantidade de dados realistas para que possa salientar a regex como dados reais faria. Se a maioria dos seus dados irá corresponder, você iria querer um regex que corresponde rapidamente; se a maioria irá falhar, você quer um regex que falha rapidamente. Eles poderiam acabar sendo o mesmo regex, mas talvez não.

A minha maneira preferida seria ter um grande conjunto de dados de entrada para o RE, em seguida, processar que os tempos de dados N (por exemplo, 100000) para ver quanto tempo leva.

Em seguida, ajustar o RE e tente novamente (manter todos os velhos REs como comentários no caso de você precisar de benchmark-los novamente no futuro, quem sabe o que otimizações maravilhosas podem aparecer em Perl 7?).

Pode muito bem haver ferramentas que podem analisar REs para dar-lhe caminhos de execução para entradas específicas (como as ferramentas de análise em DBMS '), mas, uma vez que Perl é a linguagem do preguiçoso (um mandamento proferidas pelo próprio Larry), I não podia ser incomodado indo encontrá-lo: -).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top