func Benchmark_foreach1(b *testing.B) {
var test map[int]int
test = make(map[int]int)
for i := 0; i < 100000; i++ {
test[i] = 1
}
for i := 0; i < b.N; i++ {
for i, _ := range test {
if test[i] != 1 {
panic("ds")
}
}
}
}
func Benchmark_foreach2(b *testing.B) {
var test map[int]int
test = make(map[int]int)
for i := 0; i < 100000; i++ {
test[i] = 1
}
for i := 0; i < b.N; i++ {
for _, v := range test {
if v != 1 {
panic("heh")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行结果如下
goos: linux
goarch: amd64
Benchmark_foreach1-2 500 3172323 ns/op
Benchmark_foreach2-2 1000 1707214 ns/op
Run Code Online (Sandbox Code Playgroud)
为什么 foreach-2 慢?
我认为Benchmark_foreach2-2大约快 2 倍 - 每个操作需要 1707214 纳秒,第一个需要 3172323 纳秒。所以第二个要3172323 / 1707214 = 1.85快几倍。
原因:第二个不需要再次从内存中获取值,它已经使用了v变量中的值。
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |