Beachte: Die Dummy-Variable wird in dem Beispiel von mehreren Threads gleichzeitig verwendet.
Das wird vermutlich nicht so extrem auffallen, aber das kann faszinierende Fehler erzeugen, die in komplexeren Anwendungen sch***e schwer zu finden sind
Ich hab die bei meinem Test also mit in die for-Schleibe bzw. in den For-Delegaten genommen.
Ich messe mit 100000 Durchläufen.
Wenn ich im Debug-Mode teste, ist bei mir die Performance bei der asynchronen massiv langsamer als die synchrone Variante. Hab da teilweise fast eine halbe halben Sekunde gemessen, während die synchrone Variante unter 10 ms blieb.
Ohne Debugger bewegt sich die asynchrone Variante um die 10ms, während die synchrone Variante um die 3ms liegt.
Wenn ich jetzt pro Durchlauf noch ein
Thread.Sleep(10) einfüge, dann sieht das auf einmal ganz anders aus.
Ich hab nur noch 1000 Durchläufe eingestellt, da ich keine Lust hatte, minutenlang zu warten
Debugger oder nicht ist bei mir diesmal egal, die synchrone Variante bewegt sich um die 10 Sekunden, während die asynchrone Variante zwischen 2 bis 3 Sekunden liegt.
Ich hab das auch im anderen Thread gesagt:
Das lohnt sich nur, wenn die einzelnen Durchläufe lange dauern.
Diese kurzen mathematischen Berechnungen sind nicht lange, davon kriegst Du massig in einer Millisekunde durch.
Das siehst Du ja auch schon, wenn Du synchron 100000 einstellst, kein Sleep, dann dauert das bei mir unter 10ms. Also 400000 Aufrufe von Math.Sqrt, 200000 Multiplikationen, 200000 Variablen-Zuweisungen und 100000 Variablen-Deklarationen in unter 10 Millisekunden.
Da dauert das Starten und verwalten der Threads deutlich länger als die Aufgaben selber.
Muss ich noch weiter erklären, warum das zu schnell ist?
Das Thread.Sleep soll die lang andauernde Aufgabe simulieren.
Und jetzt stell dir vor, Du musst irgendwelche Musik-Titel im RAM convertieren.
Davon wirst Du wohl keine 10 Stück haben, aber ein Titel dauert dann auf einmal mehr als nur ein paar Millisekunden.
Da lohnt sich das dann wirklich
Wichtig ist dabei aber, dass die Bilder bereits geladen sind, wenn die von einer HDD geladen werden, dann würde das ganze noch ausbremsen, weil die HDD ständig springen muss.