Hi folks,
ich bin gerade über diesen Thread gestolpert. Obwohl er als gelöst markiert ist, möchte ich mir gern eine Ergänzung erlauben.
Um n Leerzeichen zu generieren, wurde folgende Lösung vorgeschlagen, die auch soweit korrekt und universell verwendbar ist:
Hier mal eine Alternative für Geschwindigkeitsfanatiker:
Man kann anhand der Aufgabenstellung davon ausgehen, dass die zu generierenden Leerzeichenketten sicherlich nicht kilometerlange Ausmaße annehmen werden. Wenn man als worst case-Szenario mal eine maximale Leerzeichenkette von 10, 100 oder auch 1000 annimmt, dann kann man diese als Konstante definieren (hier: $Dummy). Dann könnte man auch folgenden Code zur Leerzeichengenerierung verwenden:
Vorteil der zweiten Lösung: Die Ausführungsgeschwindigkeit ist schneller. Man kann das mit den AutoIt-Funktionen TimerInit() und TimerDiff() nachprüfen. Auf meinem etwas älteren Schätzchen ergibt sich nach mehreren Durchläufen im Mittel:
Lösung 1 -> For-Next mit 10.000 Durchläufen -> ca. 7 sec.
Lösung 2 -> For-Next mit 10.000 Durchläufen -> ca. 0,5 sec.
Der Geschwindigkeitsgewinn liegt darin begründet, dass die zweite Version ein memcpy-Befehl auf CPU-Ebene (Assembler bzw. Binärcode) ist (Kopieren im Arbeitsspeicher), während bei der ersten Lösung die CPU richtig arbeiten muss. Dazu benötigt sie zusätzliche CPU-Register, muss if-Abfragen (conditional branches) behandeln und daher im Code hin und her springen sowie die Register pushen und pullen. Das kostet eben alles Zeit.
Wenn jetzt jemand meint, ich spinne, weil der Geschwindigkeitsgewinn bei obiger Aufgabenstellung völlig Banane ist, muss ich sagen: Stimmt! Wenn aber mal jemand vorhat, zeitkritische Dinge in einem Echtzeitsystem zu programmieren, sind obige Überlegungen oftmals vonnöten. Der zweiten Lösung wird in solchen und anderen ähnlich gelagerten Fällen dann der unbedingte Vorzug gewährt.
Man muss aber auch ins Kalkül ziehen, dass die zweite Lösung statischen Arbeitsspeicher (im obigen Fall für die Leerzeichenkette) benötigt. Man muss also immer abwägen.
Ich wollte die beiden Möglichkeiten auch einfach nur mal gegenüberstellen.