![]() |
AW: ReadFile und WriteFile durch Threads optmieren
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. ![]() > File Buffering, File Caching und Asynchronus I/O Zitat:
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. :wall: Und wenn ein Sektor kaputt ist, dann betrifft das im FileSystemTreiber einen Kompletten Cluster, was die Lesedauer nochmals verlierfacht. Tipp: Meinen ![]() |
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
|
AW: ReadFile und WriteFile durch Threads optmieren
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. :stupid: 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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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