![]() |
ReadFile und WriteFile durch Threads optmieren
Ich benutze schon immer ReadFile und WriteFile, um eine Datei zu kopieren.
So kopiere ich 2 10 GB Dateien von einer SSD innerhalb von 4 Minuten und 25 Sekunden. Unstoppable Copier braucht dafür 4 Minuten und 10 Sekunden. Das sind Durchschnittswerte nachdem ich etliche Tests durchlaufen habe. Der Windows-File-Cache war natürlich weg! Ist es möglich eine Kopierfunktion mit ReadFile und WriteFile so zu trennen, dass ReadFile und WriteFile je in einem Thread laufen? ReadFile befüllt eine Art Liste von der ich noch absolut keine Ahnung habe wie das sein soll, aus der sich WriteFile dann bedient. Oder ist ganz davon abzuraten? |
AW: ReadFile und WriteFile durch Threads optmieren
Theoretisch kann ReadFile Daten in einen Buffer lesen, aus dem WriteFile dann schreibt. Sowas wie eine Queue von x*4096 Bytes großen Buffern würde sich anbieten.
Aber ob das wirklich schneller ist, kann ich nicht sagen. |
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
|
AW: ReadFile und WriteFile durch Threads optmieren
Weil so kann ich
auf Abbrechen reagieren habe immer die bereits kopierten Bytes und die Bytes die im letzten Durchgang kopiert wurden in Variablen und ich kann meinen eigenen Buffer setzen Wie würde man denn das hier mit der WindowsAPI umschreiben? ![]() |
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
![]() |
AW: ReadFile und WriteFile durch Threads optmieren
Verstehe ich das richtig, dass, angenommen der Fall Program X wird von Windows XP bis 10 verwendet, ReadFile und WriteFile vor CopyFile(Ex) vorzuziehen ist, um maximale Kompatibilität zu wahren?
|
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
![]() |
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
![]() |
AW: ReadFile und WriteFile durch Threads optmieren
Mein Programm funktioniert noch wunderbar mit Windows XP.
Man muss nur aufpassen welche Winapi-Aufrufe man macht. |
AW: ReadFile und WriteFile durch Threads optmieren
Zitat:
Falls Du die Aktion auf einem einzigen Datenträger ausführen willst könnte das kontraproduktiv sein, es kommt auf die Position(ierung) des Schreiblesekopfes/die Laufwerkselektronik an. Gleiches gilt im übertragenen Sinne für SSD/USB-Sticks wobei die natürlich keinen Schreib-LeseKopf haben. Im günstigsten Falle, kannst Du den Vorgang um eine Buffergröße verschränken, so daß das Schreiben kurz nach dem Lesen erledigt ist. Ist das Zielmedium beim Schreiben schneller als das Quellmedium beim Lesen, mußt Du für das Schreiben auf jeden Fall ein paar Ehrenrunden mit einrechnen. Wenn du keine Spezialanwendung hast, bei der Du richtig hardwarenah arbeiten mußt/kannst, halte ich die Idee für verschwendete Zeit. Die paar Zehntel, die Du heraus quetschen kannst, erfordern einen solchen Aufwand daß das nur als Hobby-Anwendung vertretbar ist. Unterschätze den Test-Aufwand nicht! Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:07 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