1. ホーム
  2. swift

[解決済み] Swiftで経過時間を計測する

2022-04-28 23:32:22

質問

Swift で関数を実行したときの経過時間を測定するにはどうしたらよいでしょうか。私はこのように経過時間を表示しようとしています: "経過時間は0.05秒です"。それを見て Javaでは これを達成するために、Swiftで利用可能な同等のメソッドはありますか?

サンプルプログラムをご覧ください。

func isPrime(_ number: Int) -> Bool {
    var i = 0;
    for i=2; i<number; i++ {
        if number % i == 0, i != 0 {
            return false
        }
    }
    return true
}

var number = 5915587277

if isPrime(number) {
    print("Prime number")
} else {
    print("NOT a prime number")
}

解決方法は?

を測定するために書いたSwiftの関数がこちらです。 プロジェクト・オイラー の問題をSwiftで解決します。

Swift 3 では、Grand Central Dispatch に "swiftified" というバージョンが追加されました。ですから、正しい答えは、おそらく DispatchTime API .

私の関数は次のようなものです。

// Swift 3
func evaluateProblem(problemNumber: Int, problemBlock: () -> Int) -> Answer
{
    print("Evaluating problem \(problemNumber)")

    let start = DispatchTime.now() // <<<<<<<<<< Start time
    let myGuess = problemBlock()
    let end = DispatchTime.now()   // <<<<<<<<<<   end time

    let theAnswer = self.checkAnswer(answerNum: "\(problemNumber)", guess: myGuess)

    let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds // <<<<< Difference in nano seconds (UInt64)
    let timeInterval = Double(nanoTime) / 1_000_000_000 // Technically could overflow for long running tests

    print("Time to evaluate problem \(problemNumber): \(timeInterval) seconds")
    return theAnswer
}


古い回答

Swift 1 と 2 では、私の関数は NSDate を使用します。

// Swift 1
func evaluateProblem(problemNumber: Int, problemBlock: () -> Int) -> Answer
{
    println("Evaluating problem \(problemNumber)")

    let start = NSDate() // <<<<<<<<<< Start time
    let myGuess = problemBlock()
    let end = NSDate()   // <<<<<<<<<<   end time

    let theAnswer = self.checkAnswer(answerNum: "\(problemNumber)", guess: myGuess)

    let timeInterval: Double = end.timeIntervalSinceDate(start) // <<<<< Difference in seconds (double)

    println("Time to evaluate problem \(problemNumber): \(timeInterval) seconds")
    return theAnswer
}

<サブ NSdateをタイミング関数に使用することは推奨されないことに注意してください: " 外部時刻参照との同期や、ユーザーによる明示的な時刻変更により、システム時刻が減少する可能性があります。 "。