Einzelnen Beitrag anzeigen

Benmik

Registriert seit: 11. Apr 2009
543 Beiträge
 
Delphi 11 Alexandria
 
#1

Multithread und File I/O bei SSD/HDD

  Alt 23. Apr 2016, 16:19
Ich lese JPG ein und erstelle Vorschaubilder. Jetzt habe ich mal überprüft, welche Auswirkungen das hat, wenn ich Multithreading verwende, und das jeweils bei einer SSD und zwei herkömmlichen Festplatten (FP).
Material waren ~1.200 JPG mit insgesamt ~5 GB. Gemessen habe ich einmal mit und einmal ohne Platten-Cache (Rechner-Neustart). Verwendet habe ich nach längerem Überlegen AsyncCalls von Andreas Hausladen in der Modifikation von Zarko Gajic, da ich das WaitAll benutze.

Ergebnisse (gerundet, kommt ja auf die Größenordnung an):

Nach Neustart (Singlethread):

SSD: 85 sec
FP1: 90 sec
FP2: 90 sec

Beim Zweitstart (Singlethread):

SSD: 85 sec
FP1: 85 sec
FP2: 85 sec

Nach Neustart (Multithread):

SSD: 30 sec
FP1: 180 sec
FP2: 290 sec

Beim Zweitstart (Multithread):

SSD: 23 sec
FP1: 25 sec
FP2: 25 sec

Von der HDD-LED und vom Kraspeln her vermute ich stark, dass die Dateien auf der FP2 sehr viel verstreuter lagen als auf der FP1.

Das vorläufige Fazit ist, dass bei einer SSD Multithreading ein Muss ist, bei einer HDD ein DarfNicht. Ich habe überlegt, ob ich das Datei-Einlesen in einen eigenen Threadpool auslagern könnte, aber das geht nicht, da ich ich die Extract-Methode des IExtractImage benutze.

Jetzt könnte ich feststellen, ob die Dateien auf einer SSD liegen, und die entsprechende Strategie wählen. Das würde auch klappen, aber wie ich hier feststellen musste, würde das Administratorrechte voraussetzen.

Gibt es da Ideen zu?

Geändert von Benmik (23. Apr 2016 um 20:59 Uhr) Grund: FP beim Zweitstart Multithread 25 sec und nicht 85
  Mit Zitat antworten Zitat