SwiftExecutionTimer 包允许您测量特定代码段的执行时间。
SwiftExecutionTimer 可以使用 Swift Package Manager 进行安装。
dependencies: [
.package(url: "https://github.com/MichK1/SwiftExecutionTimer.git", exact: "0.1.0"),
]
ExecutionTimer 类通过在代码执行期间的各个点添加标记来帮助测量执行时间。每个标记可以选择包含一个标签以提高清晰度。要添加标记,请调用 ExecutionTimer.mark() 方法。
TimePoint
对象的数组,记录相对于第一个标记(设置为 0
)的时间。Duration
结构表示,该结构包括:duration
:经过的时间。startLabel
和 endLabel
:来自相应时间点的标签。ExecutionTimer
支持两个时间源:
.monotonic
:基于系统运行时间(以秒为单位)。.cpuUtilizationTime
:基于 CPU 花费在执行当前进程上的时间(仅限用户模式)。 更多详情请参考这里。下面的示例测量对包含 1000 个随机 Double
值的数组进行排序所需的时间,重复 100 次。
import SwiftExecutionTimer
func runAndMeasure() {
let executionTimer = ExecutionTimer() // Initialize the timer with the default `.monotonic` source
(0..<100).forEach { trialIndex in
executionTimer.mark("ARRAY INIT") // Mark the beginning of array initialization.
var array = (0..<1000).map { _ in Double.random(in: 0...1) }
executionTimer.mark("SORT BEGIN") // Mark the beginning of array sorting.
array.sort() // Sort the array
executionTimer.mark("SORT END") // Mark the end of array sorting.
}
// Calculate durations for time intervals starting at "SORT BEGIN".
let durations = executionTimer.durations(filter: .startLabel(.exact("SORT BEGIN")))
let minTime = durations.min(by: { $0.duration < $1.duration })?.duration
let maxTime = durations.max(by: { $0.duration < $1.duration })?.duration
let sortingTime = executionTimer.sumDurations(filter: .startLabel(.exact("SORT BEGIN")))
// Print results
print("Sorting 100 arrays with 1000 Doubles took: \(sortingTime) seconds")
print("Minimum sorting time: \(minTime ?? 0) seconds")
print("Maximum sorting time: \(maxTime ?? 0) seconds")
}
其他示例,例如排序执行时间比较,可以在 SortMeasure 示例中找到。
SwiftExecutionTimer 基于 MIT 许可证发布。 有关更多信息,请参见 LICENSE 文件。