1. ホーム
  2. swift

[解決済み] Swiftのコード実行をベンチマークするには?

2023-05-02 07:33:23

質問

Swiftで書かれたコードブロックの実行に必要な時間を正確に伝える方法・ソフトは、以下の他にありますか?

let date_start = NSDate()

// Code to be executed 

println("\(-date_start.timeIntervalSinceNow)")

どのように解決するのですか?

コードのブロックに対して単体のタイミング関数が欲しいだけなら、私は以下のSwiftヘルパー関数を使っています。

func printTimeElapsedWhenRunningCode(title:String, operation:()->()) {
    let startTime = CFAbsoluteTimeGetCurrent()
    operation()
    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    print("Time elapsed for \(title): \(timeElapsed) s.")
}

func timeElapsedInSecondsWhenRunningCode(operation: ()->()) -> Double {
    let startTime = CFAbsoluteTimeGetCurrent()
    operation()
    let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime
    return Double(timeElapsed)
}

前者は与えられたコードのセクションに必要な時間をログアウトし、後者はそれをfloatとして返します。最初のバリアントの例として

printTimeElapsedWhenRunningCode(title:"map()") {
    let resultArray1 = randoms.map { pow(sin(CGFloat($0)), 10.0) }
}

のような感じでログアウトします。

map()の経過時間: 0.0617449879646301 s

注意すること Swift のベンチマークは、選択した最適化のレベルに基づいて大きく変化します。 で、これは Swift の実行時間の相対的な比較のためにのみ有用かもしれません。それさえも、ベータ版ごとに変更されるかもしれません。