AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) ReadFile und WriteFile durch Threads optmieren
Thema durchsuchen
Ansicht
Themen-Optionen

ReadFile und WriteFile durch Threads optmieren

Ein Thema von LTE5 · begonnen am 26. Dez 2017 · letzter Beitrag vom 1. Jan 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von himitsu
himitsu

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

AW: ReadFile und WriteFile durch Threads optmieren

  Alt 1. Jan 2018, 15:04
Klar kann man das durch Threads optimieren, aber wenn es sich um HDDs handelt, dann blockieren sie sich gegenseitig.
Also Threads machen da genau das Gegenteil und es wird langsamer.

Auch bei SSDs muß es nicht unbedingt besser werden. Kommt drauf an, ob die Firmware auch multithread arbeitet, aber meistens geht das.

Aber DU mußt nicht unbeding tselbst die Threads verwalten, denn WriteFile kann auch Asynchron arbeiten, also die API startet nur die Schreib-/Leseaktion und kehrt sofort zurück.
Du kannst dann parallel Mehrwas im selben Thread machen. > Overlapped IO

Optimieren kann man zusätzlich noch durch Wahl der Puffergröße im Programm, um die Anzahl der IO-Operationen zu optimieren/verringern.
Dann kann man noch vorallem den WindowsFileCache abschalten, da der bei so großen Datenmengen alles Andere auslagert. Selbst wenn Windows so eingestellt wurde, dass Programmespeicher Vorrang vor Cache hat, werden Programme ausgelagert und dann wird das System langsam.

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
> File Buffering, File Caching und Asynchronus I/O

Zitat:
Unstoppable Copier
Ich hatte noch nie so ein Schlechtes Programm gesehn.
Speziell wenn Fehler existieren, dann wird der Schott extrem langsam, da immer genau 1 Byte kopiert wird, aber wenn etwas kaputt ist, dann sind das immer koplette Sektoren, womit dann mehrmals Leseaktionen auf diese Sektoren ausgeführt werden und für jedes einzelne Byte dann erneut Timeouts/Fehlerpprüfung/Fehlerbehebung/... ausgelöst werden, anstatt nur einmal pro Sektor.
Und wenn ein Sektor kaputt ist, dann betrifft das im FileSystemTreiber einen Kompletten Cluster, was die Lesedauer nochmals verlierfacht.

Tipp: Meinen Hier im Forum suchenFileSplitter und seinen Post in der DP suchen ... da hatte ich damals mal so ordentlich mit den Lese-&Schreibzugriffen experimentiert.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#12

AW: ReadFile und WriteFile durch Threads optmieren

  Alt 1. Jan 2018, 17:28
Zitat:
Unstoppable Copier
Ich hatte noch nie so ein Schlechtes Programm gesehn.
Ist der wirklich so schlecht? Ich benutze den recht häufig. Gibt es gute, portable Alternativen, die meine Daten nicht zerstören?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: ReadFile und WriteFile durch Threads optmieren

  Alt 1. Jan 2018, 20:54
Er funktioniert, aber es war schwachsinnig zu denken, dass es so funktionieren könnte.
Das Teil liest in größeren Blöcken und bei einem Fehler wird der Block nochmal Byteweise gelesen, um die lesbaren Teile dieses Blocks zu bekommen.
Aber es ist können immer nur komplette Sektoren gelesen werden, also bringt es nichts, dieses Byte für Byte auszulesen.

Und das Teil nutzt die FileCache zum Auslesen, was hier nichts bringt.
Hätte Jason Hatley sich eine Minute mit NonBuffered I/O-Operationen beschäftigt, dann wäre es ihm aufgefallen.
OK, wenn man keine Ahnung hat, dann könnte man vielleicht auf die Idee kommen, dass es eine gute Möglichkeit wäre, mit dem byteweisen Zugriff.

Ich hatte mal 'ne Festplatte, die "einige" defekte Sektoren besaß und brauchte über zwei Tage zum Kopieren der Platte.
> Reparaturversuche/Datenrettung nur auf einer zweiten Platte, falls dabei mehr kaput geht und man immernoch das Original hat.

Hatte dann später selbst eine billige Kopierfunktion geschrieben, und die war nach wenigen Stunden fertig.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 1. Jan 2018 um 21:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 16:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz