草庐IT

swift - 在 Swift 中测量耗时

coder 2023-07-14 原文

我们如何衡量在 Swift 中运行函数所用的时间?我试图像这样显示耗时:“耗时是 .05 秒”。看到了 in Java ,我们可以使用 System.nanoTime(),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 5.7 中,我认为以下所有内容都已过时。 Swift 5.7 引入了 Clock 的概念它似乎具有旨在执行此处所需的功能的功能。

一旦我获得 Swift 5.7 并有时间修改它,我将立即更新示例。


这是我编写的用于测量 Project Euler 的 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 用于计时功能:“由于与外部时间引用同步或由于用户明确更改时钟,系统时间可能会减少。”。

关于swift - 在 Swift 中测量耗时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755558/

有关swift - 在 Swift 中测量耗时的更多相关文章

  1. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  2. ruby-on-rails - 有没有办法获取 Rails 服务器运行的耗时? - 2

    我只想在我的Rails项目中的某个地方以HTMLView将其打印出来,以及其他一些有用的信息。类似于“当前运行时间=4d11h54m2s”或“自2013年8月23日起运行”。令人惊讶的是,在任何地方都找不到有关此的任何信息。也许有一种通用的Rack方法可以做到这一点。 最佳答案 这其实很容易做到。创建一个文件,config/initializers/uptime.rb,包含:YourApplication::BOOTED_AT=Time.now这只是将当前时间与那个时间进行比较的情况,您可以使用time_ago_in_wordsra

  3. ruby - 如何从 Sass 混合方程中删除测量单位? - 2

    我编写了一个非常简单的Sassmixin,用于将像素值转换为rem值(请参阅JonathanSnook的articleonthebenefitsofusingrems)。这是代码://MixinCode$base_font_size:10;//10px@mixinrem($key,$px){#{$key}:#{$px}px;#{$key}:#{$px/$base_font_size}rem;}//Includesyntaxp{@includerem(font-size,14);}//RenderedCSSp{font-size:14px;font-size:1.4rem;}这个mixi

  4. ruby - 如何测量 cucumber 步骤的执行时间 - 2

    我正在寻找一种方法来衡量我的cucumber步骤的执行时间。使用junit格式,我设法获得了一些有关功能和场景执行时间的数据,但我还想查看场景中步骤的时间。 最佳答案 cucumber--formatusage“打印使用步骤定义的地方。首先列出最慢的步骤定义(带有持续时间)。” 关于ruby-如何测量cucumber步骤的执行时间,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7

  5. ruby - 使用 Ruby 测量 HTTP 请求的响应时间 - 2

    我正在构建一个供个人使用的小型网站,以测试我公司制作的API。我的老板想要一个网站,我们可以在其中输入网站,使用GET或POST请求表单,以及发送请求的次数。他想要记录请求、每个请求的时间以及所有请求的平均时间。有没有一种方法可以使用Ruby测量GET或POST请求的响应时间?我查看了Net::HTTP库,但没有看到任何返回所用时间的内容。有没有网站已经这样做了?他们需要有一个GUI,这样非技术人员也可以使用它。如果没有,我计划使用一个简单的表单来运行脚本,将该脚本的输出写入文本文件或电子表格,然后将其发送给用户。还有其他建议吗?(一个漂亮的AJAX外观界面可能工作得很好,但可能需要数

  6. ruby - 测量命令行调用的执行时间 - 2

    我正在编写一个Ruby1.9.2脚本来评估不同外部命令行调用的执行时间。我使用ruby​​Process.system方法来执行命令行调用并trycatch执行时间如下:start=Time.nowsystem("./script1","argX")puts"Duration:#{Time.now-start}seconds"现在我遇到的问题是,持续时间反射(reflect)的不是外部进程的执行时间,而是“系统”调用的执行时间。知道如何测量外部进程的执行时间吗? 最佳答案 好的。如果我明白你想做什么,你想计算“./script1”调

  7. ruby - 如何测量 Ruby 对象的大小? - 2

    关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。Improvethisquestion我遇到了Memcache问题,我想知道了解我创建的对象有多大的最佳方法是什么。我唯一的解决方案是将它们放入以字节为单位显示大小的Memcache(顺便说一下,我可以自定义Memcache的输出吗?我想要可读的千字节......)。谢谢,凯文

  8. ruby - 用 Ruby 测量两个字符串之间的距离? - 2

    我可以用Ruby测量两个字符串之间的距离吗?即:compare('Test','est')#Returns1compare('Test','Tes')#Returns1compare('Test','Tast')#Returns1compare('Test','Taste')#Returns2compare('Test','tazT')#Returns5 最佳答案 由于原生C绑定(bind),更加容易和快速:geminstalllevenshtein-ffigeminstalllevenshteinrequire'levenshte

  9. ruby-on-rails - Ruby 方法的测量和基准测试时间 - 2

    我如何测量Ruby中方法和该方法中的各个语句所花费的时间。如果您看到下面的方法,我想测量该方法所花费的总时间以及数据库访问和redis访问所花费的时间。我不想在每条语句之前都写Benchmark.measure。ruby解释器是否为我们提供了执行此操作的任何钩子(Hook)?deffoo#codetoaccessdatabase#codetoaccessredis.end 最佳答案 最简单的方法:require'benchmark'deffootime=Benchmark.measure{codetotest}putstime.re

  10. ruby - 我如何在 Ruby 中获得以毫秒为单位的耗时? - 2

    如果我有一个Time对象来自:Time.now然后我用同一行实例化另一个对象,我怎么知道已经过去了多少毫秒?第二个对象可能会在同一分钟、接下来的几分钟甚至几小时内创建。 最佳答案 如前所述,您可以对Time对象进行操作,就好像它们是数字(或浮点)值一样。这些操作会产生可以轻松转换的第二分辨率。例如:deftime_diff_milli(start,finish)(finish-start)*1000.0endt1=Time.now#arbitraryelapsedtimet2=Time.nowmsecs=time_diff_mill

随机推荐