Leser: 1
|< 1 2 >| | 18 Einträge, 2 Seiten |
Tr0Nix+2007-12-21 09:51:41--Hallo zusammen
[...]
Umfang:
Die Files sind in erster Linie Sourcecode. Sprich in den allermeisten Fällen < 1MB, dafür sehr viele Dateien.
Fragen die beispielsweise bei mir aufgetaucht sind:
- Macht es Sinn, die Datei zuerst komplett ins Memory einzulesen statt Zeilenweise mittels $zeile = <FD>?
Quote- Die aktuellen Regular Expressions nutzen alle markierte Subexpressions (also die runden Klammern () um anschliessend mit $1, $2... zuzugreifen) auch wenn diese Informationen teilweise nicht genutzt werden. Kann das die Performance beeinträchtigen?
- Sind Regular Expressions CPU-lastig? Das Script läuft zeitweise auf einem Multi-CPU Sun Server -> Multithreading
renee+2007-12-21 09:58:59--Kann man so allgemein nicht sagen. Wenn es Bedingungen gibt, die ein "Abbruch" der Analyse bedingen, ist es eher kontraproduktiv. Wenn Du aber Reguläre Ausdrücke hast, die im Prinzip über viele Zeilen (der einzulesendende) gehen, kann es sinnvoll sein.
QuoteDas "Compilieren" der RegEx ist schon relativ aufwändig. Deshalb wäre es eventuell geschickt, vorkompilierte RegEx zu verwenden.
Ganz interessant wäre zu wissen, was das eigentliche Ziel ist. Was analysierst Du denn mit den Regulären Ausdrücken? Ist es Perl-Code?
QuoteÜber was geht denn die Diplomarbeit?
Tr0Nix+2007-12-21 10:10:58--QuoteÜber was geht denn die Diplomarbeit?
Um das Erkennen von möglicherweise ungewünschten Informationen in Sourcecodes. Beispielsweise in Kommentaren oder Ausdrücken, die auf schlechten bzw. hartkodierten Programmierstil hinweisen (if $kunde == "foo@bar.com"...). Hier können natürlich auch mehrere Checks "aufleuchten" - wegen einer E-Mail und wegen eines Vergleichs mit einer Konstante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/usr/bin/perl use strict; use warnings; use Benchmark qw(:all); my $string = "Dies ist ein Test mit einer längeren Zeile"; timethese( 5000000, { capture => sub { $string =~ /(es).*?T(es).*(ei)/}, noncapture => sub { $string =~ /(?:es).*?T(?:es).*(?:ei)/ }, } );
1
2
3
4
C:\>benchmark.pl
Benchmark: timing 5000000 iterations of capture, noncapture...
capture: 8 wallclock secs ( 8.53 usr + 0.00 sys = 8.53 CPU) @ 586097.76/s (n=5000000)
noncapture: 5 wallclock secs ( 4.91 usr + 0.00 sys = 4.91 CPU) @ 1019160.21/s (n=5000000)
|< 1 2 >| | 18 Einträge, 2 Seiten |