当前位置: 首页 > 面试题库 >

在Swift中测量经过时间

华星剑
2023-03-14
问题内容

我们如何衡量在Swift中运行一个函数所花费的时间?我试图以这种方式显示经过的时间:“经过的时间为.05秒”。看到在Java中,我们可以使用System.nanoTime(),Swift中有可用的等效方法来实现这一点吗?

请看一下示例程序

func isPrime(var 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)) {
    println("Prime number");
} else {
    println("NOT a prime number");
}

问题答案:

这是我编写的用于测量Swift中的Euler问题的Swift函数

从Swift 3开始,Grand Central Dispatch现在有一个“精简版”版本。因此正确的答案可能是使用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用于计时功能:“ 由于与外部时间参考同步或由于用户明确更改了时钟,因此系统时间可能会减少。 ”。



 类似资料:
  • 问题内容: 有没有一种简单的方法/模块可以 正确 测量python中的经过时间?我知道我可以简单地打电话两次并取差额,但是如果更改系统时间,那将产生错误的结果。当然,这种情况很少发生,但这确实表明我在衡量错误的事情。 考虑到持续时间时,使用它来衡量是难以置信的。您将两个绝对时间测量值的差值反过来由持续时间测量值(由计时器执行)和已知的绝对时间(手动设置或通过ntp设置)构成,而您根本不感兴趣。 因

  • 问题内容: 我想要的是开始在代码中的某个地方开始计时,然后获取经过的时间,以衡量执行少量功能所花费的时间。我认为我使用的timeit模块错了,但是文档对我来说很混乱。 问题答案: 使用代替。前者会自动在你的平台和Python版本上提供最佳时钟:

  • 问题内容: 我有一个10和20问题游戏。我需要计算用户完成游戏需要花费多少时间。 我用它来停止计数器: 现在我需要两件事: 一种如何计算经过时间并将其存储在变量中的方法 我需要最终值是两倍,例如最终得分是:15.49秒。 问题答案: 游戏开始时: 游戏结束时:

  • 问题内容: 我想要这样的东西: 同样重要的是,例如,如果startTime为23:00,endTime为1:00,则持续时间为2:00。 为了在Java中完成此操作,应使用哪些类型? 问题答案: 不幸的是,到目前为止发布的十个答案中没有一个是正确的。 如果要测量经过的时间,并且希望它是正确的,则必须使用。你不能使用,除非你不介意结果错误。 的目的是测量经过的时间,目的是测量挂钟时间。你不能将一个用

  • 问题内容: 使用python中的Time模块,可以测量经过的时间吗?如果是这样,我该怎么做? 我需要这样做,以便如果光标在小部件中已存在一定时间,则会发生事件。 问题答案: 您还可以编写简单的装饰器来简化各种功能的执行时间的度量: 用法: 您可以同时分析多个功能。然后要打印测量值,只需调用print_prof_data():

  • 问题内容: 我是Android编程的新手,所以请您为我的问题提供帮助。我正在尝试以秒/毫秒为单位测量MouseEvent.ACTION_DOWN和MouseEvent.ACTION_UP之间的时间。 我的问题实际上是因为seconds变量没有显示我想要的内容,我什至不知道它的测量结果是否正确,对于上面的示例,持续时间为16545(???!?!?) -3秒。我该怎么做才能在两个MotionEvent