Thread Perl Speicherprobleme mit großen Dateien (W32 Version)
(31 answers)
Opened by Mapache at 2009-05-05 14:38
Ich habe ein Perl Programm geschrieben, welches mir aus einer 3,5GB Datei bestimmte Logzeilen extrahieren soll. Die Datei wird dazu zeilenweise eingelesen und an Hand von Regulären Ausdrücken untersucht.
Die resultierenden Dateien werden bis maximal 800MB groß. Trotzdem, dass ich die große INPUT-Datei von 3,5GB zeilenweise und nicht in ein @Array einlese, bleibt mir Perl unter Windows (Activestate und Cygwin) bei etwa 1,6GB (=mein freier RAM; habe 2GB und 400 werden verbraucht) stehen. Wieso ist das so? Ich lese die Datei doch nicht in den Speicher ein.. Auch andere Tools kommen damit nicht klar. Ich habe noch folgende getestet: - Gnu AWK für Win32 - Gnu egrep für Win32 - Windows' natives "Findstr" (grep ähnlich) - sogar das GNU Tool "split" für Win32 kommt damit nicht klar (Es splittet die Files bis zur RAM Größe (z.B. 3x500MB und macht dann ein großes File mit dem Rest)) Alle brechen irgendwann ab. Dabei lese ich doch nur Zeile für Zeile. Hier mein Perl-Code. Vielleicht hat ja jemand eine Idee. Vorab: Ich habe auch Tie::File getestet. Das liest aber sehr lange und bricht dann vor der Schleife bereits ab, als ob es das File von meiner Platte entgegen der Angabe auf der CPAN-Seite doch komplett einlesen würde. Code: (dl
)
1 #!/usr/bin/perl -w Info: Ist eine 3,5 GB Datei mit ASCII Inhalt auf einem NTFS Volume |