tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von Bratkartoffel
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1830
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ole Ole ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    15
    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 :
    1
    2
    3
    4
    
    open(F, "./Chromosomes/chr1.fasta") || die();
    @fastacontent = <F>;
    $fastacontent[0] = "";
    $joinedFasta = lc(join("", @fastacontent));
     

  2. #2
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.298
    Hallo,

    auf die Schnelle hat mir Google folgendes geliefert:
    http://www.unix.com/shell-programmin...mory-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
    Geändert von Bratkartoffel (23.08.10 um 09:27 Uhr)
    Ole bedankt sich. 
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  3. #3
    Ole Ole ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    15
    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
     

  4. #4
    renee renee ist offline Mitglied Brokat
    Registriert seit
    Jan 2004
    Beiträge
    332
    Auch wenn das Problem schon gelöst ist: Für die Bearbeitung von FASTA-Dateien gibt es verschiedene Module auf CPAN, wie z.B. BioPerl[1] (das eine ganze Palette an Modulen für Bioinformatik-Anwendungen bietet) und Bio::FASTASequence[2] / Bio::FASTASequence::File[3]

    Mit solchen Modulen lässt sich sehr häufig sehr viel Arbeit sparen...

    [1] http://search.cpan.org/dist/BioPerl
    [2] http://search.cpan.org/dist/Bio-FASTASequence
    [3] http://search.cpan.org/dist/Bio-FASTASequence-File
     

  5. #5
    Ole Ole ist offline Mitglied
    Registriert seit
    Aug 2009
    Beiträge
    15
    Werd ich mir auch mal anschauen. Vielen Dank für den Tipp
     

Ähnliche Themen

  1. Memory Error
    Von Zack im Forum PHP
    Antworten: 6
    Letzter Beitrag: 19.12.08, 23:27
  2. Memory Error
    Von Duellking im Forum PHP
    Antworten: 3
    Letzter Beitrag: 31.07.07, 09:41
  3. Fatal error: Allowed memory...
    Von em3L im Forum PHP
    Antworten: 26
    Letzter Beitrag: 06.05.07, 15:22
  4. Memory Error
    Von rayinstructor im Forum 3D Studio Max
    Antworten: 4
    Letzter Beitrag: 18.01.05, 17:05
  5. Out of Memory error
    Von MiRaMC im Forum Java
    Antworten: 7
    Letzter Beitrag: 02.12.04, 15:48