Strings schneller verarbeiten
Verfasst: 26.06.2020 17:33
Hallo,
ich bin noch in der Einarbeitung und hab ein Allerweltsproblem, aber vielleicht kann mir jemand helfen. Ich lese eine größere Menge Log-Dateien aus und verarbeite einige ausgewählte Einträge daraus (mit einige meine ich einige 100000). Die Einträge werden gekürzt und aufbereitet und anschließend in eine andere, nun kleinere, Datei geschrieben, damit sie später weiterverwendet werden können. Lange Rede, kurzer Sinn: Wenn ich die Werte anschließend verarbeiten will wird mein Programm zur Unendlichkeitsmaschine. Das Problem ist, dass ich einen Teil jedes Eintrags zu einem String zusammenführe ("Eintrag1|Eintrag2|Eintrag3|etc."), der dann natürlich echt lang wird. Mir ist klar, dass die Verarbeitung dadurch wortwörtlich ins Bodenlose stürzt (wenn ich die Zeile ausklammere sind es nur noch Millisekunden). In der Theorie könnte man natürlich eine Liste oder etwas anderes verwenden, aber vielleicht hat noch jemand eine weitere Idee. Ein weiteres Problem ist, dass nicht nur einer dieser Strings besteht sondern mehrere gecacht werden. Also bräuchte ich dann noch eine Verwaltung für die eventuellen Listen. Ob ich im Nachhinein die Werte aus einer Liste auslese oder mit StringField verarbeite ist mir relativ wurscht. Das langsamste ist eindeutig die ständige Erweiterung des Strings. Meine direkte Frage:
Ich nutze eine Map, der String ist momentan in dem Eintrag "MapName(Programmname)\Einzelwerte" gespeichert. Kann ich stattdessen auch für "Einzelwerte" die Adresse einer Liste speichern und verwenden und wird das schneller? Ich müsste dann für jedes Programm eine Liste erstellen, die Adresse in der Map speichern und kann dann darauf zugreifen (jedenfalls stelle ich es mir so vor). Ist das schneller und geht das überhaupt? Kennt vielleicht jemand noch eine schnellere Lösung?
Ich hoffe ich konnte mich richtig ausdrücken,
Jac
ich bin noch in der Einarbeitung und hab ein Allerweltsproblem, aber vielleicht kann mir jemand helfen. Ich lese eine größere Menge Log-Dateien aus und verarbeite einige ausgewählte Einträge daraus (mit einige meine ich einige 100000). Die Einträge werden gekürzt und aufbereitet und anschließend in eine andere, nun kleinere, Datei geschrieben, damit sie später weiterverwendet werden können. Lange Rede, kurzer Sinn: Wenn ich die Werte anschließend verarbeiten will wird mein Programm zur Unendlichkeitsmaschine. Das Problem ist, dass ich einen Teil jedes Eintrags zu einem String zusammenführe ("Eintrag1|Eintrag2|Eintrag3|etc."), der dann natürlich echt lang wird. Mir ist klar, dass die Verarbeitung dadurch wortwörtlich ins Bodenlose stürzt (wenn ich die Zeile ausklammere sind es nur noch Millisekunden). In der Theorie könnte man natürlich eine Liste oder etwas anderes verwenden, aber vielleicht hat noch jemand eine weitere Idee. Ein weiteres Problem ist, dass nicht nur einer dieser Strings besteht sondern mehrere gecacht werden. Also bräuchte ich dann noch eine Verwaltung für die eventuellen Listen. Ob ich im Nachhinein die Werte aus einer Liste auslese oder mit StringField verarbeite ist mir relativ wurscht. Das langsamste ist eindeutig die ständige Erweiterung des Strings. Meine direkte Frage:
Ich nutze eine Map, der String ist momentan in dem Eintrag "MapName(Programmname)\Einzelwerte" gespeichert. Kann ich stattdessen auch für "Einzelwerte" die Adresse einer Liste speichern und verwenden und wird das schneller? Ich müsste dann für jedes Programm eine Liste erstellen, die Adresse in der Map speichern und kann dann darauf zugreifen (jedenfalls stelle ich es mir so vor). Ist das schneller und geht das überhaupt? Kennt vielleicht jemand noch eine schnellere Lösung?
Ich hoffe ich konnte mich richtig ausdrücken,
Jac