2010-01-18T22:47:25
pq2010-01-18T22:29:30
Escapeam einfachsten wäre wohl ein Hash-Splice (um Doppler zu filtern) aber ich habe die Befürchtung dass ich damit zuviel Speicher belege.
ob du zuviel speicher belegst, kannst du nur selbst beantworten, da nur du die anzahl der keys kennst und wie lang die keys sind. wenn du es genau wissen willst, probier es aus und benutz
Devel::Size.
bei der programmierung geht es sehr oft um geschwindigkeit gegenüber speicherverbrauch.
durch die komplexität deines bisherigen algorithmus (jedes element mit jedem vergleichen, also O(n^2) verbrauchst du eine menge zeit. würdest du einen der arrays in einem hash ablegen, um im anderen duplikate zu löschen, würdest du, ich sag jetzt einfach mal, 3 mal soviel speicher verbrauchen, aber ein vielfaches an zeit sparen.
OK - hat geklappt.
Der Speicherverbrauch war tatsächlich sehr groß aber ich habe die Dateien welche die Altdaten und die Neudaten enthalten, dann schrittweise in Blöcken von jeweils max. 500 Zeilen verarbeitet und die jeweilgen Arrays an den Hash übergeben.
Laufzeit mit Loop: 4,2 Sek.
Laufzeit mit Hash-Slice: 0,405 Sek.
Die Deutsche Rechtschreibung ist Freeware; Du darfst sie kostenlos nutzen – aber sie ist nicht Open Source, d.h. Du darfst sie nicht verändern und/oder in veränderter Form veröffentlichen.