AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Große Textdateien spitten

Ein Thema von muhael · begonnen am 29. Okt 2017 · letzter Beitrag vom 30. Okt 2017
Antwort Antwort
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 20:54
Das Problem dürfte dann aber sein, dass du zwar vier Threads hast, aber die Platte nur einen Schreibkopf. Müsste man aber wohl ausprobieren.
Tja er kann sich aber das erzeugen von 4 Dateien sparen,
Ich weiss es jetzt auch nicht genau, aber ich denke wenn Du nur auf einer Datei liest und darum geht es ja letztendlich dürfte der filecache von Windows schon helfen,
Es ist letztendlich nur eine Datei offen anstatt 4. Meiner Meinung nach , ungetestet müsste das aber die schnellste Lösung sein. Immerhin reden wir von 4 minuten nur für das erzeugen bevor die threads überhaupt anfangen können......
Fritz Westermann
  Mit Zitat antworten Zitat
muhael

Registriert seit: 5. Mär 2013
42 Beiträge
 
#2

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 20:59
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
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:06
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
Das verstehe ich jetzt nicht,
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....
Fritz Westermann
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#4

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:09
Zitat:
Nachtrag 2: Bei HDDs macht es sich ja immer gut, wenn die Buffergröße sich an die Sectorgröße des Dateisystems orientiert. Gibt es so was bei SSDs eigentlich noch?
Dafür müsste man aber auch erstmal an diese Information gelangen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:11
Ah. Ja. Bei der zu lesenden Datei. Ich nehme alles zurück und behaupte das Gegenteil
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
muhael

Registriert seit: 5. Mär 2013
42 Beiträge
 
#6

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:17
Das verstehe ich jetzt nicht,
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....
Der Thread gibt auch Werte zurück.
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
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:21
Das verstehe ich jetzt nicht,
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....
Der Thread gibt auch Werte zurück.
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
Das ist aber jetzt ein ganz anderes problem, wo helfen Dir da verschiedene Dateien dür den Input?
Im Gegenteil es wird sogar einfacher zu analysieren da es nur einen input gibt
Fritz Westermann

Geändert von Fritzew (29. Okt 2017 um 21:22 Uhr) Grund: Bin am ipad rechtschreibfehler eingebaut��
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#8

AW: Große Textdateien spitten

  Alt 29. Okt 2017, 21:23
und wenn 4 Threads gleichzeitig 4 Zeilen bearbeiten und dann gleichzeitig die Liste abrufen wollen gibts ja probleme mit dem Zugriff darauf
Ja, aber das ist unabhängig davon, ob die Threads nun jeweils eine eigene Datei lesen oder in einer Datei jeweils die vierte Zeile.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.398 Beiträge
 
Delphi 12 Athens
 
#9

AW: Große Textdateien spitten

  Alt 30. Okt 2017, 10:15
Darum liest nur Einer die Datei und gibt die Zeilen an die Threads weiter. (1)
Oder man macht z.B. eine CriticalSection um den Lesebefehl, bei jedem Thread. (2)



Außerdem ist es blöde ungünstig Einzelzeilen weiterzureichen/zu lesen.

Wenn sich jeder Thread (2) mehrere Zeilen holt und sie dann verarbeitet, bis er sich den nächsten Pack holt,
oder wenn man mehrere Zeilen z.B. in eine Liste/Array einfügt und diese Listen dann an einen der Threads übergibt (1 ... also Liste abarbeiten und dann Freigeben)
oder wenn man jeder Thread schon eine Liste/Array hat und der Lesethread diese Liste dann regelmäßig mit mehreren Zeilen befüllt, wenn die Liste leer oder zu leer ist (2) ...
> So kann man die Sperrenden Zugriffe verringern.

In neueren Delphis gibt es nicht nur Threads, sondern auch Tasks, da kann man z.B. jeweils 100 Zeilen Lesen und dafür erstellt man eine Task und diese Tasks lässt man dann z.B. in 4 Threads abarbeiten.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Okt 2017 um 10:17 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#10

AW: Große Textdateien spitten

  Alt 30. Okt 2017, 11:11
Zitat:
In neueren Delphis gibt es nicht nur Threads, sondern auch Tasks, da kann man z.B. jeweils 100 Zeilen Lesen und dafür erstellt man eine Task und diese Tasks lässt man dann z.B. in 4 Threads abarbeiten.
Wie wäre es denn mit der For-Schleife aus der PPL?
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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