Domanda

Qual è il modo migliore per profilare le regex del Perl per determinare quanto costano?

È stato utile?

Soluzione

Perl viene fornito con il modulo Benchmark , che può prendere un numero di esempi di codice e rispondere la domanda di "quale è più veloce?" Ho un Suggerimento Perl su Nozioni di base sul benchmarking e, sebbene non utilizzi regexps in sé, offre una rapida e utile introduzione all'argomento, insieme a ulteriori riferimenti.

brian d foy ha anche un eccellente capitolo sul benchmarking nel suo Mastering Perl libro. È stato così gentile da mettere il in linea come bozza , che vale la pena leggere. Non posso davvero raccomandarlo abbastanza.

Paul

Altri suggerimenti

Basta dire " usa il benchmark & ??quot; il modulo in realtà non risponde alla domanda. Il benchmarking di una regex è diverso dal benchmarking di un calcolo; hai bisogno di una grande quantità di dati realistici in modo da poter sottolineare la regex come farebbero i dati reali. Se la maggior parte dei tuoi dati corrisponderà, vorrai una regex che corrisponda rapidamente; se la maggior parte fallisce, vuoi una regex che fallisca rapidamente. Potrebbero finire per essere la stessa regex, ma forse no.

Il mio modo preferito sarebbe quello di avere un ampio set di dati di input all'IR quindi elaborare quei dati N volte (ad esempio, 100.000) per vedere quanto tempo impiega.

Quindi modifica l'IR e riprova (conserva tutti i vecchi RE come commenti nel caso in cui dovessi confrontarli di nuovo in futuro, chissà quali meravigliose ottimizzazioni potrebbero apparire in Perl 7?).

Potrebbero esserci strumenti in grado di analizzare le RE per fornirti percorsi di esecuzione per input specifici (come gli strumenti di analisi in DBMS ') ma, poiché Perl è il linguaggio dei pigri (un comandamento impartito dallo stesso Larry), I non ci si può preoccupare di trovarlo :-).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top