G
Guest
Gast
Mit erstaunen musste ich gerade feststellen das die Boardsuche z.B. auf "Repeated allocation" keinen einzigen Treffer ergab. bin ich etwa der einzige Depp der es geschafft hat diesen Fehler zu produzieren? :shock:
Ich habe ein Programm das Daten aus relativ großen Dateien(50-200MB) einliest und dabei >100000 Objekte in einem Vector anlegt. Gelesen wird jeder Datensatz byteweise in einer Schleife. Jedes der ca. 100000 Objekte wird in der Schleife zuerst mit "new" als temporäres Objekt allokiert, die Daten werden gelesen und per "Set"-Methoden der Unterobjekte(die wiederum im Konstruktor mit "new" allokiert werden, besitzen je Unterobjekt ca. 10 Attribute und dafür je 10 Getter und Setter, sind also nur reine Datenklassen) geschrieben. Nachdem so ein temp Object mit allen daten aus dem jeweiligen Datensatz befüllt wurde, schiebe ich es mit "add(temp)" in den Vector.
Nun, das scheint so wohl nicht sehr elegant zu sein. Da ich bis jetzt nur C++ programmiert habe vermisse ich ein explizites delete(oder würde ich damit das Objekt im Vector auch zerstören da identisch). Irgendwie steig ich da nicht ganz durch. Code ist leider recht umfangreich, deshalb vermeid ich es mal den hier ausfürhlich zu posten(hoffe meine Umschreibung reicht euch, wenn nicht bitte gezielt nachfragen).
Das schmeisst mir die Eclipse Console um die Ohren:
und in der Tat: Es dauert scheisslange bis die Operation eine Datei ins Programm einzulesen abgeschlossen ist. Mit den Daten zu arbeiten geht dann hingegen wesentlich flotter...
Was mach ich alles falsch? hab schon probiert soviel "new" wie möglich zu vermeiden, aber an einigen Stellen brauch ich es doch und die 100000 Schleifendurchläufe kann ich auch nicht vermeiden. So langsam verzweifel ich dran. Das Schlimme ist, neue Sachen auszuprobieren macht einen total fertig weil es ja immer so lang dauert um ne Kleinigkeit zu testen (Programm abschiessen wenn man keinen Bock mehr allein dauert ne halbe Minute...) Hoffe irgendwer kann mir helfen :cry:
Ich habe ein Programm das Daten aus relativ großen Dateien(50-200MB) einliest und dabei >100000 Objekte in einem Vector anlegt. Gelesen wird jeder Datensatz byteweise in einer Schleife. Jedes der ca. 100000 Objekte wird in der Schleife zuerst mit "new" als temporäres Objekt allokiert, die Daten werden gelesen und per "Set"-Methoden der Unterobjekte(die wiederum im Konstruktor mit "new" allokiert werden, besitzen je Unterobjekt ca. 10 Attribute und dafür je 10 Getter und Setter, sind also nur reine Datenklassen) geschrieben. Nachdem so ein temp Object mit allen daten aus dem jeweiligen Datensatz befüllt wurde, schiebe ich es mit "add(temp)" in den Vector.
Nun, das scheint so wohl nicht sehr elegant zu sein. Da ich bis jetzt nur C++ programmiert habe vermisse ich ein explizites delete(oder würde ich damit das Objekt im Vector auch zerstören da identisch). Irgendwie steig ich da nicht ganz durch. Code ist leider recht umfangreich, deshalb vermeid ich es mal den hier ausfürhlich zu posten(hoffe meine Umschreibung reicht euch, wenn nicht bitte gezielt nachfragen).
Das schmeisst mir die Eclipse Console um die Ohren:
....
....
....
GC Warning: Repeated allocation of very large block (appr. size 655360):
May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 659456):
May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 663552):
May lead to memory leak and poor performance.
...
...
...
GC Warning: Repeated allocation of very large block (appr. size 37752832):
May lead to memory leak and poor performance.
und in der Tat: Es dauert scheisslange bis die Operation eine Datei ins Programm einzulesen abgeschlossen ist. Mit den Daten zu arbeiten geht dann hingegen wesentlich flotter...
Was mach ich alles falsch? hab schon probiert soviel "new" wie möglich zu vermeiden, aber an einigen Stellen brauch ich es doch und die 100000 Schleifendurchläufe kann ich auch nicht vermeiden. So langsam verzweifel ich dran. Das Schlimme ist, neue Sachen auszuprobieren macht einen total fertig weil es ja immer so lang dauert um ne Kleinigkeit zu testen (Programm abschiessen wenn man keinen Bock mehr allein dauert ne halbe Minute...) Hoffe irgendwer kann mir helfen :cry: