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?