private func CalcWake(int windDirection, int saveTo) {
var t = GetSystemTime(7) + GetSystemTime(6) \* 1000 + GetSystemTime(5) \* 60000;
/\*Code, den ich hier mal weggelassen hab um ihn nicht erklären zu müssen\*/
Log("t: %v", GetSystemTime(7) + GetSystemTime(6) \* 1000 + GetSystemTime(5) \* 60000 - t);
CycleWindMap("CalcWakeInnerLoop", windDirection < 180, Inside(windDirection, 90, 179), start, stop, startDir, windDirection, saveTo, turbCounts);
}
"t: 0"
, der Script Profiler gibt jedoch das hier aus:00999ms MAW5::CalcWake
00798ms MAW5::CalcWakeInnerLoop
t: 0
t: 481
00481ms MAW5::CalcWake
00467ms MAW5::CalcWakeInnerLoop
t: 0
t: 525
00526ms MAW5::CalcWake
00312ms MAW5::CalcWakeInnerLoop
t: 0
t: 621
00623ms MAW5::CalcWake
00616ms MAW5::CycleWindMap
00398ms MAW5::CalcWakeInnerLoop
private func CycleWindMap(string functionName, bool reverseI, bool reverseJ) {
for(var i = reverseI \* xMap; Inside(i, 0, xMap); i += reverseI \* -2 + 1) {
for(var j = reverseJ \* yMap; Inside(j, 0, yMap); j += reverseJ \* -2 + 1) {
Call(functionName, i, j, Par(3), Par(4), Par(5), Par(6), Par(7), Par(8), Par(9));
}
}
}
CycleWindMap("Funktion", 0, 0)
CycleWindMap("Funktion", 1, 1)
>Anscheinend entsteht der größte Zeitaufwand durch das Übergeben der Parameter an die aufgerufene Funktion, da lässt sich leider nichts machen.
...
statt der einzelnen Par-Aufrufe schneller ist?>Mir ist beim Testen aufgefallen, dass ich die Laufzeit von CycleWindMap von ca. 200 ms auf 4 ms (!) reduzieren kann
>Hast du da mal versucht, ob ... statt der einzelnen Par-Aufrufe schneller ist?
Call(functionName) 2300ms
Call(functionName, i, j) 6400ms
Call(functionName, i, i, j, j) 10500ms
Call(functionName, ...) (mit 9 übergebenen Parametern an CycleWindMap) 2380ms
Call(functionName, Par(2), Par(3), Par(4), Par(5), Par(6), Par(7), Par(8), Par(9)) 2480ms
200ms
ohne i und j, 250ms
mit und 300ms
mit weiteren Parametern (Unterschied zwischen ... und Par konnte ich nicht feststellen)>Wenn du Inside() so ersetzt hast wie in meinem Post oben, dann ist klar, warum es rückwärts schneller läuft: in dem Fall macht die Schleife nämlich gar nichts.
>Daher sollte xMap maximal LandscapeWidth()-1 sein und yMap entsprechend.
Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill