Schnullerpip / EDMA

Teamprojekt HTWG Konstanz
0 stars 0 forks source link

Severseitige Limits #40

Closed sandrotonon closed 9 years ago

sandrotonon commented 9 years ago

Memory Limit muss hoch gesetzt werden. Da wir zu viel Speicher verbrauchen.

julmayer commented 9 years ago

haben wir zugiff auf die grosse Datei mit dem der Import schief ging um das zu testen?

julmayer commented 9 years ago

sehr komisch. Der Parser ist in Zeile 41 ausgestiegen wegen Speicher voll: da wird die Datei von ISO-8859-1 zu UTF-8 konvertiert damit die regular expression funktioniert und mit Umlaute alles glatt geht. Da gibts glaub nichts zu optimieren. Das ist der quasi komplette Code der hier wichtig ist:

    public function __construct($file, $projekt_id) {
        $this->_file = $file;
        $this->_db = DB::getInstance();
        $this->_projektID = $projekt_id;
        $this->parse();
    }

    private function parse() {
        $stringFile = file_get_contents($this->_file);

        $charset = mb_detect_encoding($stringFile, "UTF-8, ISO-8859-1");
        // falls Datei in ISO Format ist muss konvertiert werden.
        // falls weitere charsets vorkommen muss iconv() statt utf8_encode benutzt werden
        if ($charset === "ISO-8859-1") {
            $stringFile = utf8_encode($stringFile);
        }

erlaubt sind sind 268435456 bytes = 256MB

Zeile 41 ist $stringFile = utf8_encode...

Eigentlich ist da der Inhalt der Datei maximal 2 mal vorhanden und zwar beides mal in $stringFile. Wobei halt niemand sagen kann was in utf8_encode() passiert. Trotzdem find ich es komisch das wir bei ner knapp 60MB Datei (wenn ich es noch richtig im Kopf hab) die 256MB Grenze sprengen... Das ist immerhin ueber 4 mal so gross... Hab halt keine Ahnung auf was man dann erhoehen sollte. Eventuell muesste man doch auf so ne Line by Line implementierung umsteigen aber ich weiss nicht ob wir das auf die schnelle koennen. http://stackoverflow.com/questions/3171155/least-memory-intensive-way-to-read-a-file-in-php/3171193#3171193

julmayer commented 9 years ago

also die ein oder andere Variable kann man vermutlich schon noch freigeben mit unset($variable) sobald sie nicht mehr gebraucht @phwachte denk mal du hast da den besten Ueberblick, sonst koennen wir vielleicht auch Montag nochmal zusammen drueber schauen.

phwachte commented 9 years ago

Herr Mauz hat das memory_limit auf dem Server erhöht, zudem verbrauchen wir durch das zeilenweise Einlesen jetzt auch deutlich weniger Speicher, daher closed.