[Perl] Out of Memory Error


Ole

Grünschnabel
Guten Tag Tutorials.de Com!

Ich hab ein kleines Problem ein Perlskript unter Windows auszuführen.

In dem Skript wird eine Textdatei(ca 70 MB) eingelesen und mittels join() zu einem String zusammengepackt. Darin suche ich dann mittels der index()-Funktion.

Das Problem ist, dass ich nach kurzer Zeit einen "Out of Memory!"-Error bekomme.

Mein Windows-PC hat 3 GB RAM. Da sollten 70MB bzw. 140MB doch eigentlich kein Problem sein, oder?

Auf meinem Netbook mit nur 1GB RAM (Linux-System) funktioniert es auch einwandfrei. Nur unter Windows eben nicht.

Vll hat ja jemand eine Idee woran das liegen könnte.

Gruss,
Ole

p.s.

hier nochmal die entsprechende Codestelle:
Code:
open(F, "./Chromosomes/chr1.fasta") || die();
@fastacontent = <F>;
$fastacontent[0] = "";
$joinedFasta = lc(join("", @fastacontent));
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hallo,

auf die Schnelle hat mir Google folgendes geliefert:
http://www.unix.com/shell-programming-scripting/28336-out-memory-perl.html

So wie der eine in dem Thread liest du die ganze Datei auf einem Schlag ein und arbeitest dann damit. Dies ist sehr ineffizient, du solltest die Datei lieber in Stücken einlesen und dann nach und nach verarbeiten.
Mal grob geschätzt braucht dein Script für die Daten mindestens 4x soviel RAM, wahrscheinlich sogar mehr.
Bei 100 MB Daten macht das 400 MB, bei 500 MB Daten sind es schon 2 GB.

Gruß
BK
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Ole

Ole

Grünschnabel
Ja das würde es erklären. Habe es inzwischen auch so umgeschrieben dass ich while(<F>){} benutze um die Datei zu durchsuchen.

Trotzdem vielen Dank für deine Antwort. Wieder was gelernt :)
 

renee

Erfahrenes Mitglied

Forum-Statistiken

Themen
272.356
Beiträge
1.558.615
Mitglieder
187.832
Neuestes Mitglied
SirrDansen