본문 바로가기
Swift

Swift: add, adds, append, appends 속도 비교

by songmoro 2025. 3. 30.
728x90

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]을 배열에 더하는 연산을 다중 add, adds, 다중 append, appends로 각각 수행할 때의 속도 비교

다중 add를 제외하면 평이하며, 다중 add의 경우 n이 100000000 일 때, 다른 API에 비해 3배의 속도 차이가 발생

 

 

import SwiftUI

func measure(label: String, repeatCount: Int, function: () -> ()) {
    let time = ContinuousClock().measure { for _ in 1...repeatCount { function() } }
    print(label, ":", time)
}

struct ContentView: View {
    @State var count = 1

    var body: some View {
        VStack {
            Button("count up") {
                count *= 10
            }

            Button("act") {
                print("count:", count)

                DispatchQueue.global(qos: .default).async {
                    var array1: [Int] = []

                    measure(label: "multipleAddTest", repeatCount: count) {
                        multipleAddTest(array: &array1)
                    }
                }

                DispatchQueue.global(qos: .default).async {
                    var array1: [Int] = []

                    measure(label: "addsTest", repeatCount: count) {
                        addsTest(array: &array1)
                    }
                }

                DispatchQueue.global(qos: .default).async {
                    var array2: [Int] = []

                    measure(label: "multipleAppendTest", repeatCount: count) {
                        multipleAppendTest(array: &array2)
                    }
                }

                DispatchQueue.global(qos: .default).async {
                    var array2: [Int] = []

                    measure(label: "appendsTest", repeatCount: count) {
                        appendsTest(array: &array2)
                    }
                }
            }
        }
    }
}

func multipleAddTest(array: inout [Int]) {
    array += [1]; array += [2]; array += [3]; array += [4]; array += [5]
    array += [6]; array += [7]; array += [8]; array += [9]; array += [10]
}
func addsTest(array: inout [Int]) { array += [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] }
func multipleAppendTest(array: inout [Int]) {
    array.append(1); array.append(2); array.append(3); array.append(4); array.append(5)
    array.append(6); array.append(7); array.append(8); array.append(9); array.append(10);
}
func appendsTest(array: inout [Int]) { array.append(contentsOf: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) }

T: 1

count: 1
multipleAddTest : 4.1291e-05 seconds
addsTest : 2.6666e-05 seconds
multipleAppendTest : 1.0083e-05 seconds
appendsTest : 7.083e-06 seconds
count: 10
multipleAddTest : 0.000181875 seconds
addsTest : 2.0458e-05 seconds
multipleAppendTest : 1.4042e-05 seconds
appendsTest : 1.5667e-05 seconds
count: 100
multipleAddTest : 0.000888084 seconds
addsTest : 0.000161417 seconds
multipleAppendTest : 9.9792e-05 seconds
appendsTest : 0.000118041 seconds
count: 1000
multipleAppendTest : 0.000433375 seconds
appendsTest : 0.000483042 seconds
addsTest : 0.00052075 seconds
multipleAddTest : 0.002576541 seconds
count: 10000
multipleAppendTest : 0.006920083 seconds
addsTest : 0.009006417 seconds
appendsTest : 0.007847291 seconds
multipleAddTest : 0.03783675 seconds
count: 100000
multipleAppendTest : 0.045787083 seconds
appendsTest : 0.052623583 seconds
addsTest : 0.0549155 seconds
multipleAddTest : 0.218208958 seconds
count: 1000000
multipleAppendTest : 0.322293375 seconds
appendsTest : 0.377831292 seconds
addsTest : 0.398095417 seconds
multipleAddTest : 1.998216208 seconds
count: 10000000
multipleAppendTest : 3.038764541 seconds
appendsTest : 3.581436708 seconds
addsTest : 3.824015041 seconds
multipleAddTest : 19.635421875000002 seconds
count: 100000000
multipleAppendTest : 35.929126208 seconds
appendsTest : 41.468625916 seconds
addsTest : 45.541043167000005 seconds
multipleAddTest : 202.733317833 seconds

 

T: 2

count: 1
multipleAddTest : 3.8292e-05 seconds
addsTest : 3.6792e-05 seconds
multipleAppendTest : 1.2375e-05 seconds
appendsTest : 7.083e-06 seconds
count: 10
multipleAppendTest : 3.8459e-05 seconds
appendsTest : 2.9792e-05 seconds
addsTest : 6.6292e-05 seconds
multipleAddTest : 0.000116291 seconds
count: 100
addsTest : 8.4583e-05 seconds
multipleAppendTest : 0.000111667 seconds
appendsTest : 0.000135875 seconds
multipleAddTest : 0.000367083 seconds
count: 1000
multipleAppendTest : 0.000568333 seconds
appendsTest : 0.000657375 seconds
addsTest : 0.001043125 seconds
multipleAddTest : 0.004148125 seconds
count: 10000
appendsTest : 0.005168667 seconds
multipleAppendTest : 0.005443792 seconds
addsTest : 0.007414208 seconds
multipleAddTest : 0.035665458 seconds
count: 100000
multipleAppendTest : 0.050155209 seconds
appendsTest : 0.053920709 seconds
addsTest : 0.058275167 seconds
multipleAddTest : 0.220477375 seconds
count: 1000000
multipleAppendTest : 0.315868458 seconds
appendsTest : 0.370974542 seconds
addsTest : 0.389733167 seconds
multipleAddTest : 1.989497417 seconds
count: 10000000
multipleAppendTest : 2.950279417 seconds
appendsTest : 3.49816375 seconds
addsTest : 3.701100792 seconds
multipleAddTest : 19.582014792 seconds
count: 100000000
multipleAppendTest : 34.1580875 seconds
appendsTest : 39.940011333 seconds
addsTest : 41.809610458 seconds
multipleAddTest : 198.984946417 seconds
728x90

'Swift' 카테고리의 다른 글

주니어 iOS 개발자 Swift 면접 질문  (0) 2025.04.23
Swift: add, append 속도 비교  (0) 2025.03.30
Swift: if let, guard let 속도 비교  (0) 2025.03.30
Swift: async let 수행 순서  (0) 2025.03.30
Swift Concurrency  (0) 2025.02.04