Freier Speicher während der Schleife

8

Ich habe einen Speicherfehler in meinem Code. Mein Parser könnte so zusammengefasst werden:

%Vor%

Das Ziel besteht darin, eine (große) Datei zu analysieren, wobei jede Zeile in ein json-Objekt umgewandelt wird, das in eine Datei zurückgeschrieben wird.

Mein Ziel ist es, den Footprint zu reduzieren, da dieser Code in einigen Fällen einen Speicherfehler auslöst. Nach jedem fout.write möchte ich löschen (freier Speicher) obj referenz.

Ich habe versucht, obj auf None zu setzen, um die Methode obj.free_all() aufzurufen, aber keine von ihnen gibt den Speicher frei. Ich habe auch simplejson anstelle von json verwendet, die den Footprint reduziert haben, aber in manchen Fällen immer noch zu groß.

test.in sieht folgendermaßen aus:

%Vor%     
Ali SAID OMAR 17.02.2016, 10:00
quelle

2 Antworten

1

Damit obj frei verfügbar ist, müssen alle Referenzen darauf entfernt werden. Ihre Schleife hat dies nicht getan, weil der Verweis in list_obj noch vorhanden war. Folgendes wird behoben:

%Vor%

Alternativ können Sie das Element destruktiv von der Vorderseite von list_obj entfernen, obwohl dies möglicherweise zu Leistungsproblemen führen kann, wenn list_obj zu oft neu zugewiesen werden muss. Ich habe nicht damit experimentiert, also bin ich mir nicht wirklich sicher. Diese Version sieht so aus:

%Vor%     
Tom Karzes 26.02.2016, 08:05
quelle
4

Speichern Sie nicht viele Instanzen der Klasse im Array, sondern inline. Beispiel.

%Vor%

Wenn es langsam ist, schreibe nicht zeilenweise in die Datei, sondern speichere die gespeicherte json-Zeichenkette im Array und mache dst.write("\n".join(array))

    
YOU 17.02.2016 13:28
quelle