此包让您可以收集并轻松可视化关于数据结构实现和集合算法的性能数据。 它的创建旨在帮助开发 Swift 集合 包,但它在更多方面都非常有用!
该项目主要专注于 Swift 代码的基准测试,但它也可以用于运行其他语言的基准测试(尤其是分析基准测试结果)。
这是一个简短的基准测试,用于衡量 Array.sorted()
和 Set.contains(_:)
的性能
import CollectionsBenchmark
var benchmark = Benchmark(title: "Demo Benchmark")
benchmark.addSimple(
title: "Array<Int> sorted",
input: [Int].self
) { input in
blackHole(input.sorted())
}
benchmark.add(
title: "Set<Int> contains",
input: ([Int], [Int]).self
) { input, lookups in
let set = Set(input)
return { timer in
for value in lookups {
precondition(set.contains(value))
}
}
}
benchmark.main()
以下是如何运行它
$ swift run -c release benchmark run results --cycles 5
Running 2 tasks on 76 sizes from 1 to 1M:
Array<Int> sorted
Set<Int> contains
Output file: /Users/klorentey/Projects/swift-collections-benchmark-demo/Demo/results
Appending to existing data (if any) for these tasks/sizes.
Collecting data:
1.2.4...8...16...32...64...128...256...512...1k...2k...4k...8k...16k...32k...64k...128k...256k...512k...1M -- 5.31s
1.2.4...8...16...32...64...128...256...512...1k...2k...4k...8k...16k...32k...64k...128k...256k...512k...1M -- 5.35s
1.2.4...8...16...32...64...128...256...512...1k...2k...4k...8k...16k...32k...64k...128k...256k...512k...1M -- 5.29s
1.2.4...8...16...32...64...128...256...512...1k...2k...4k...8k...16k...32k...64k...128k...256k...512k...1M -- 5.3s
1.2.4...8...16...32...64...128...256...512...1k...2k...4k...8k...16k...32k...64k...128k...256k...512k...1M -- 5.34s
Finished in 26.6s
$ swift run -c release benchmark render results chart.png
$ open chart.png
这就是你得到的结果
今天我了解到,对 Array
中的 20 个整数进行排序所花费的时间与查看一个包含 20 个成员的 Set
中的所有项目所花费的时间大致相同。 太有趣了! 🤓
要了解此库提供的功能,请务必查看我们的 入门指南!
Swift 集合基准测试主要用作开发者工具,而不是在生产应用中使用的东西。
它公开了一个源代码级别的 API 和一个命令行界面,这两个接口在技术上都尚未稳定。 经过最初的实验阶段后,我们希望稳定这两个接口。 在此之前,新版本有时可能会带来一些更改,这些更改可能会破坏现有的基准测试定义,或者可能会以某种方式更改命令行界面,从而破坏现有的脚本。 尽管如此,即使在这个混乱的初始阶段,我们也会尽力将这种情况降到最低(或通过多版本弃用期来缓解)。
要在 SwiftPM 项目中使用此包,请将以下行添加到 Package.swift
文件中的依赖项中
.package(url: "https://github.com/apple/swift-collections-benchmark", from: "0.0.1"),
在典型情况下,你将需要设置一个专用于基准测试的独立可执行目标
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "MyPackage",
products: [
.executable(name: "my-benchmark", targets: ["MyBenchmark"]),
],
dependencies: [
.package(url: "https://github.com/apple/swift-collections-benchmark", from: "0.0.1"),
// ... other dependencies ...
],
targets: [
// ... other targets ...
.target(
name: "MyBenchmark",
dependencies: [
.product(name: "CollectionsBenchmark", package: "swift-collections-benchmark"),
]),
]
)
我们可以使用 Swift 集合论坛 来提问和回答有关如何使用或处理此包的问题。 它也是讨论其发展的绝佳场所。
如果你发现看起来像是错误的东西,请打开一个 错误报告! 尽可能详细地填写。
(注意:该软件包目前没有附带很多测试,这反映了它作为支持项目的起源 -- 我们努力改进这一点!)
通过提交 pull request,你表示你有权将你的贡献许可给 Apple 和社区,并且通过提交补丁同意你的贡献根据 Swift 许可证 获得许可,该许可证的副本 在此存储库中提供。
与所有 Swift.org 项目一样,我们希望 Swift 集合基准测试项目能够培养一个多元化且友好的社区。 我们希望贡献者遵守 Swift.org 行为准则。 该文档的副本 在此存储库中提供。
此软件包当前的的代码所有者是 Karoy Lorentey (@lorentey)。 你可以 在 Swift 论坛上 联系他,或者发送电子邮件至 klorentey at apple dot com。 (请保持与本项目相关。)
如果出现审核问题,你也可以直接联系 Swift 核心团队 的成员。