Ich testete meinen Code in Playground, aber wie die Diskussion darauf hinweist, dass Playground Debug Konfiguration ist, sobald ich alle diese Code in Real-App läuft, machen sie keinen großen Unterschied. Ich weiß noch nichts über diese Debug/Release-Sache.Warum ist dieser For-Schleife-Ansatz verglichen mit dem Map-Ansatz so langsam?
Schnelle Leistungsbezogene Frage, ich muss den Pixel-Offset von Bildern durchlaufen, zuerst habe ich es auf diese Weise versucht.
func p1() -> [[Int]]{
var offsets = [[Int]]()
for row in 0..<height {
var rowOffset = [Int]()
for col in 0..<width {
let offset = width * row + col
rowOffset.append(offset)
}
offsets.append(rowOffset)
}
return offsets
}
Aber es ist sehr langsam, ich gesucht und einige Code-Schnipsel Schleife durch Offset diese Weise gefunden:
func p2() -> [[Int]]{
return (0..<height).map{ row in
(0..<width).map { col in
let offset = width * row + col
return offset
}
}
}
Also testete ich, wenn ich Funktion p1 und p2 eine Schleife durch height = 128 und Breite = 128 Bild, p1 ist 18 mal langsamer als p2, warum p1 ist so langsam im Vergleich zu p2? Ich frage mich auch, gibt es einen anderen schnelleren Ansatz für diese Aufgabe?
Danke, durch diese es sich verbessert, aber nur ein wenig, Karte noch gewinnt überwiegend – XueYu
@XueYu testen Sie in Debug oder Release-Konfiguration mit? Die 'map'-Version wird in beiden schnell sein, da die stdlib mit Optimierungen kompiliert wird, aber Ihre benutzerdefinierte Version wird in Release viel schneller sein als in Debug. –
Ich mache einfach einen sehr einfachen Test im Spielplatz, benutze CACurrentMediaTime(), um die verwendete Zeit anzuzeigen. – XueYu