Swift Xcode时间剖面仪精度
我想知道从一个屏幕到另一个屏幕的确切时间。例如,登录和访问下一个屏幕需要多长时间。 我试着使用Xcode时间分析器,但它并没有记录所有内容。我甚至启用了“高频”选项,但我仍然认为缺少了一些东西。我的理解是,为了达到准确度,你必须使用路标。这是可行的,但您必须将iOS版本设置为12,并更改代码以添加os_路标。 有没有其他方法可以在不改变iOS版本的情况下实现这一点?还是密码 您对另一个Xcode探查器工具或其他可以提供此输出的工具有什么建议吗Swift Xcode时间剖面仪精度,swift,xcode,instruments,Swift,Xcode,Instruments,我想知道从一个屏幕到另一个屏幕的确切时间。例如,登录和访问下一个屏幕需要多长时间。 我试着使用Xcode时间分析器,但它并没有记录所有内容。我甚至启用了“高频”选项,但我仍然认为缺少了一些东西。我的理解是,为了达到准确度,你必须使用路标。这是可行的,但您必须将iOS版本设置为12,并更改代码以添加os_路标。 有没有其他方法可以在不改变iOS版本的情况下实现这一点?还是密码 您对另一个Xcode探查器工具或其他可以提供此输出的工具有什么建议吗 我认为时间分析器会给我每个方法的开始和结束时间,类似
我认为时间分析器会给我每个方法的开始和结束时间,类似于Android Studio分析器。我错过了什么吗?“我错过了什么吗”不是真的。内置时间分析器工具的核心功能是定位执行时间最长的方法,并让您了解它们在哪里花费时间。如果您发现可以从时间分析器中的列表转到实际代码的时间分析器显示,显示在其中的特定调用中花费的时间,那么您基本上已经了解了所有需要了解的内容。如果您想将一段特定的代码括起来,正如您所说,这正是路标的用途。有几点观察:
os\u signpost
,你必须在iOS 12设备/模拟器上进行评测,但你不必更改应用程序的目标。您只需将日志记录语句包装在可用的块中,例如:
import UIKit
import os.log
@available(iOS 12.0, *)
let pointsOfInterest = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: .pointsOfInterest)
class ViewController: UIViewController {
@IBAction func didTapNextButton(_ sender: Any) {
if #available(iOS 12.0, *) {
os_signpost(.begin, log: pointsOfInterest, name: "Transition")
}
performSegue(withIdentifier: "Next", sender: self)
}
}
及
If#available
检查并且您必须支持较旧的操作系统版本,只需使用kdebug
:
kdebug_signpost_start(0, 0, 0, 0, 0)
及
你的兴趣点范围上没有很好的名称,但它在较旧的iOS版本中工作有关更多信息,请参阅WWDC 2018视频。非常感谢您的详细解释。我还有一个问题。在构建发布应用程序时,kdebug是否会自动被忽略,即使它在代码中?或者我必须把它包装起来#如果调试?使用
kdebug
,您可能必须这样做。使用OSLog
,您的OSLog
的定义将具有if
逻辑,如中所示。顺便说一下,我不确定您是否想要#if DEBUG
,因为您应该始终在优化的构建上进行性能评测。调试构建中的性能基准测试没有什么意义。是的,在优化构建上执行性能评测是正确的。再次感谢您的帮助!
kdebug_signpost_start(0, 0, 0, 0, 0)
kdebug_signpost_end(0, 0, 0, 0, 0)