我很好奇是否有人在之前尝试过pool地图?我以前读过关于pooling buffers的内容,我想知道是否通过类似的推理,如果必须经常创建和销毁它们,或者如果有任何理由,先验,它可能不会高效。当一个地图返回到池中时,人们必须遍历它并删除所有元素,但似乎一个受欢迎的建议是create a new map instead of deleting the entries in a map which has already been allocated and reusing it,这让我觉得合并地图可能不那么有用。
答案 0 :(得分:1)
如果您的地图通过删除或添加条目而改变(大量),这将导致新的分配,并且没有将它们合并的好处。
如果您的地图的大小不会改变,但只有键的值会发生变化,那么合并将是一次成功的优化。
当您读取类似表格的结构(例如CSV文件或数据库表)时,这将很有效。每行将包含完全相同的列,因此您不需要清除任何条目。
以下基准测试显示使用library(reshape2)
library(ggplot2)
test <- abs(rnorm(12)*1000)
test <- rbind(test, test+500)
colnames(test) <- month.abb[seq(1:12)]
rownames(test) <- c("first", "second")
otherTest <- apply(test, 2, mean)
test <- melt(test)
otherTest <- data.frame(
Var2 = names(otherTest),
value = otherTest
)
otherTest$Var2 = factor(otherTest$Var2, levels = levels(test$Var2))
ggplot(test, aes(x = Var2, y = value, group = 1)) +
geom_bar(aes(fill = Var1), stat="identity") +
geom_line(data = otherTest)
运行
go test -benchmem -bench .
答案 1 :(得分:1)
就像@GrzegorzŻur所说,如果您的地图的大小没有太大变化,那么汇集是有帮助的。为了测试这一点,我做了一个基准测试,其中池化胜出。我机器上的输出是:
a
You entered : a
You entered :
基准代码:
Pool time: 115.977µs
No-pool time: 160.828µs