Ergebnis 1 bis 4 von 4

Thema: memory allocation Problem bei CSV-Import

  1. #1
    Contao-Nutzer
    Registriert seit
    24.01.2015.
    Ort
    Tönisvorst
    Beiträge
    31

    Frage memory allocation Problem bei CSV-Import

    Hallo Liebe Gemeinde, ich stehe momentan vor einem doch größerem Problem, das ich mal ganz fix zusammen fasse:

    Es handelt sich um eine Erweiterung für einen Import via CSV die ich entwickle. Es erfolgt eine auswahl, in welche Tabelle der Import erfolgen soll und die auswahl innerhalb der CSV, welche Felder wohin eingetragen werden sollen, also unabhängig davon, wie der aufbau der CSV ist, sollen die daten in Contao integriert werden, dazu nutze ich die Callbacks des jeweiligen DCA´s(also die Tabelle, die ausgewählt wurde, wohin die Daten importiert werden sollen), das klappt alles super, zuweisung usw, alles kein problem, ABER, wenn ich versuche etwa 600 Zeilen der CSV einzulesen und über die jeweiligen Callbacks(bisher nur der OnloadCallback, die Button save_Callbacks und der Submit_callback) die Daten (weil ich nicht weiß und wissen will wie die daten weiter gehandhabt werden) sende, bekomme ich ein memory allocation Fehler. Ich habe soweit es ging, mit unset alles Freigegeben, aber mal reicht es, mal nicht.

    Meine Frage ist eigentlich, speichert Contao etwas(z.B. ind den $GLOBALS), was ich irgendwie abschalten kann, weil nach jeder CSV Zeile ca. (glaube ich, habs mit der umrechnung nicht so) 4MB zusätzlich belegt werden, die einfach nicht freigegeben werden.

    Ich hab mit get Memory geschaut, ob es an der funktion selber liegt, aber die verbraucht sogut wie nicht, die ersten zwei drei aufrufe der callbacks verbrauchen recht viel speicher, aber danach ist der verbrauch konstant, wird aber nicht freigegeben nach jedem durchlauf, ich bin momentan ratlos.

    Ich hoffe ihr habt ne idee trotz der sperrlichen infos, aber ich hab leider grad wenig zeit und dazu sei gesagt, ich hab nicht die große Ahnung, aber es betrifft alle Module, egal ob eigene oder Core Module, der konstante Verbrauch ist da, wird nicht freigegeben und läßt den speicher vollaufen.

  2. #2
    Contao-Urgestein
    Registriert seit
    03.06.2010.
    Ort
    Wuppertal
    Beiträge
    2.149
    User beschenken
    Wunschliste

    Standard

    Interessant zu wissen wäre.
    - Contao Version
    - Über welche Memory Limits sprechen wir hier? 32MB? 64MB? 1024MB?

    Dann wäre interessant zu wissen wie die Datei eingelesen wird und wie du sie verarbeitest - wenn man da 10 ineinandergeschachtelte Schleifen hat, die jeweils alle nicht mit Referenzen, sondern Gesamtkopien des Dateiinhalts arbeitet, kann das schon mal schwierig werden.

    Wie groß ist die Datei?
    Auf welche Weise liest du die 600 Zeilen ein?

    Klar "schleppt" Contao Variablen mit - kann man die einfach entfernen? Jein.
    Sollte man es tun? Nein.

  3. #3
    Contao-Fan Avatar von eS_IT
    Registriert seit
    21.07.2010.
    Ort
    Werne a. d. Lippe
    Beiträge
    585
    Partner-ID
    6161
    User beschenken
    Wunschliste

    Standard

    Hallo Armour,

    ich verstehe nicht ganz, was Du mit den Callbacks machst. Normalerweise lade ich die Daten aus der CSV und ggf. weitere Daten aus anderen Tabellen in einem Konverter-Objekt. Damit kann dann eine Umwandlung der Daten geschehen, wenn nötig. Wenn man es unbedingt dynamisch möchte, kann man sich die Daten auch vom options_callback holen, dann würde ich das Ergebnis aber puffern. Ohne detailliertere Infos zu Deinem Vorgehen kann man aber wenig konkretes sagen. Du kannst mal hier schauen, da hat Christian de la Haye einen sehr umfangreichen Importer erstellt. Vielleicht findest Du dort einige Anregungen.

    Viele Grüße,
    eS_IT
    Viele Grüße,
    eS_IT
    --
    e@sy Solutions IT - Ihr Partner für professionelle Softwareentwicklung
    Website - Contao Codebook - Partnerprofil - GitHub

  4. #4
    Contao-Nutzer
    Registriert seit
    24.01.2015.
    Ort
    Tönisvorst
    Beiträge
    31

    Standard Problem behoben

    Zitat Zitat von Flex Beitrag anzeigen
    Interessant zu wissen wäre.
    - Contao Version
    - Über welche Memory Limits sprechen wir hier? 32MB? 64MB? 1024MB?

    Dann wäre interessant zu wissen wie die Datei eingelesen wird und wie du sie verarbeitest - wenn man da 10 ineinandergeschachtelte Schleifen hat, die jeweils alle nicht mit Referenzen, sondern Gesamtkopien des Dateiinhalts arbeitet, kann das schon mal schwierig werden.

    Wie groß ist die Datei?
    Auf welche Weise liest du die 600 Zeilen ein?

    Klar "schleppt" Contao Variablen mit - kann man die einfach entfernen? Jein.
    Sollte man es tun? Nein.
    Version ist 3.2.20 und Limit liegt bei 256.
    Die Dateien werden Zeilenweise eingelesen und verarbeitet und ineinander verschalte Schleifen, sind es eigentlich nur 2, bis auf das einlesen der jeweiligen Button Save Callbacks.
    Ich dachte Contao "logt" vielleicht etwas mit, was auch immer, was man problemlos eventuell wieder löschen kann, war aber nur eine Idee.

    Zitat Zitat von eS_IT Beitrag anzeigen
    Hallo Armour,

    ich verstehe nicht ganz, was Du mit den Callbacks machst. Normalerweise lade ich die Daten aus der CSV und ggf. weitere Daten aus anderen Tabellen in einem Konverter-Objekt. Damit kann dann eine Umwandlung der Daten geschehen, wenn nötig. Wenn man es unbedingt dynamisch möchte, kann man sich die Daten auch vom options_callback holen, dann würde ich das Ergebnis aber puffern. Ohne detailliertere Infos zu Deinem Vorgehen kann man aber wenig konkretes sagen. Du kannst mal hier schauen, da hat Christian de la Haye einen sehr umfangreichen Importer erstellt. Vielleicht findest Du dort einige Anregungen.

    Viele Grüße,
    eS_IT
    Die Sache mit den Callbacks ist schnell erklärt, der Import soll für jedes Modul möglich sein, ohne wissen zu müssen, ob irgendetwas z.B. im Submit-Callback oder den Button Save Callbacks passiert (Änderung von daten, aufruf von Funktionen etc.).
    Den Links schau ich mir mal an danke.

    Vielleicht bin ich auch auf den falschen Weg, habe ja noch nicht wirklich lang Erfahrung mit Contao. Ich dachte, wenn ich die benötigten Callbacks aufrufe, dann übernimmt das betreffende Modul die Weiterverarbeitung der Daten die ich ihm sende, ohne das ich wirklich wissen muss, was das modul mit den Daten weiter macht, weil sonst könnte ich die Daten ja auch nur einfach in die Datenbank schreiben. Kleines Beispiel, ein Modul an dem ich die Daten sende, legt beim Submit-Callback weitere Inhalte zu weiteren Modulen an, dieses Modul wird ständig weiterentwickelt und durch den Aufruf der Callbacks, kann es mir egal sein was sich noch alles ändert (Pflichtfelder usw werden vor dem Import geprüft). Vielleicht gibt es auch einen einfacheren Weg, der jetzige funktioniert Super, bis auf das Speicherproblem, ich könnte den Speicher auch raufsetzen, aber das löst ja nicht das Problem des zulaufenden Speichers.

    UPDATE:: Das Problem hat sich behoben. Der Grund für das zulaufen des Speichers konnte ich in diesem Beitrag finden und die Lösung auch.
    Geändert von Armour (11.05.2015 um 14:37 Uhr) Grund: Problem behoben

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •