![]() |
AW: Große Textdateien spitten
Moment. Du schreibst doch in vier? Ich habe jetzt euren Code nicht studiert, aber du hast eine zum Lesen geöffnet und vier zum schreiben. Oder schließt er die zu schreibenden Dateien immer wieder.
|
AW: Große Textdateien spitten
Das Habe ich uach schon überlegt, aber jede zeile gibt nach der Analyse auch einen wert wieder, dieser wird mit den schon bestehenden Werten verglichen und geschaut ob er schon vorhanden ist, wenn nicht wird er hinzugefügt. Problem an 4 threads die jeweils eine Zeile haben ist ja dann, dass die threads warten müssen um auf den Speicher von der Liste zugreifen zu können
|
AW: Große Textdateien spitten
Zitat:
|
AW: Große Textdateien spitten
Zitat:
|
AW: Große Textdateien spitten
Zitat:
1. Zeile -> Datei 1 2. Zeile -> Datei 2 3. Zeile -> Datei 3 4. Zeile -> Datei 4 Und wieder von vorne, bis die Datei vollständig aufgeteilt ist. Irgendwie muss ich also für jede Zeile wissen, wo sie anfängt und wo sie aufhört. Da die Zeilen unterschiedlich lang sind, kann man ja nicht eine bestimmte Anzahl von Zeichen "am Stück" lesen. Die Idee von Fritzew ist aber auch nicht von der Hand zu weisen. Man spart viel Plattenplatz und die entsprechenden Schreiboperationen. Wenn wer jede vierte Zeile verarbeiten muss, kann er ja die übrigen Zeilen überlesen. Und wo die erste Zeile für den Beginn ist, kann man ja mit einem Offset für die am Anfang zu überlesenden Zeilen angeben. Und ob jetzt vier Threads vier Dateien lesen oder vier Threads eine Datei, dürfte für den Schreibkopf auch eher egal sein. Bzw.: Das was bei einer Datei gelesen wird, liegt physikalisch vermutlich näher beeinander, als bei auf mehrere Dateien verteilten Inhalten. Die Sectorgröße ist doch abhängig vom Dateisystem und nicht von der Hardware. Oder irre ich da? Eine Datei wird in 'ner Schleife gelesen und in vier wird geschrieben. Geöffnet wird am Anfang und am Ende alles geschlossen und nicht zeilenweise auf und zu. Aber es wäre doch einen Versuch Wert, die Datei nicht zu splitten, sondern jeweils nur die vierte Zeile auszuwerten. Man muss nur am Anfang angeben, ob keine, eine, zwei oder drei Zeilen zu überlesen sind. |
AW: Große Textdateien spitten
Zitat:
Ob der Thread nun jede x zeile aus einem File oder jede Zeile aus „seinem“ file liest ist doch egal... Ich meine ja gib dem Thread mit welche zeile er zu verarbeiten hat also jeder thread verarbeitet nur jede xte zeile. Wobei x für jeden anderst ist Thread 1 ab erster zeile dann 3überspringen.... Thread 2 ab der 2 zeilw dann 3 überspringen.. Etc.... |
AW: Große Textdateien spitten
Zitat:
|
AW: Große Textdateien spitten
Ah. Ja. Bei der zu lesenden Datei. Ich nehme alles zurück und behaupte das Gegenteil ;)
|
AW: Große Textdateien spitten
Zitat:
falls er eine Zeile nicht analysieren konnte gibt er die Zeile zurück, diese wird in eine Datei geschrieben (Um nicht den Ram unnötig zu füllen, da ja die Dateien 3-4 GB groß sind) Analysierte Zeilen werden zurückgegeben und mit der liste der bereits anderen Analysierten Zeilen verglichen und ggf hinzugefügt. und wenn 4 Threads gleichzeitig 4 Zeilen bearbeiten und dann gleichzeitig die Liste abrufen wollen gibts ja probleme mit dem Zugriff darauf |
AW: Große Textdateien spitten
Zitat:
Im Gegenteil es wird sogar einfacher zu analysieren da es nur einen input gibt |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz