![](/img/trans.png)
[英]Akka : Map Future of HttpResponse to create new HttpRequests
[英]Is it faster to create a new Map or clear it and use again?
我需要在我的項目中使用許多地圖,所以我想知道哪種方式更有效:
val map = mutable.Map[Int, Int] = mutable.Map.empty
for (_ <- 0 until big_number)
{
// do something with map
map.clear()
}
或者
for (_ <- 0 until big_number)
{
val map = mutable.Map[Int, Int] = mutable.Map.empty
// do something with map
}
使用時間和memory?
好吧,我的正式回答總是取決於。 因為您需要對自己的方案進行基准測試,並查看更適合您的方案的方案。 我將提供一個示例,您可以如何嘗試對自己的代碼進行基准測試。 讓我們從編寫測量方法開始:
def measure(name: String, f: () => Unit): Unit = {
val l = System.currentTimeMillis()
println(name + ": " + (System.currentTimeMillis() - l))
f()
println(name + ": " + (System.currentTimeMillis() - l))
}
假設在每次迭代中,我們需要在 map 中插入一個鍵值對,然后打印出來:
Await.result(Future.sequence(Seq(Future {
measure("inner", () => {
for (i <- 0 until 10) {
val map2 = mutable.Map.empty[Int, Int]
map2(i) = i
println(map2)
}
})
},
Future {
measure("outer", () => {
val map1 = mutable.Map.empty[Int, Int]
for (i <- 0 until 10) {
map1(i) = i
println(map1)
map1.clear()
}
})
})), 10.seconds)
在這種情況下,output 在inner
和outer
之間幾乎總是相等的。 請注意,在這種情況下,我並行運行這兩個選項,就好像我不會第一個總是花費更多的時間,無論哪個是第一個。
因此,我們可以得出結論,在這種情況下,它們幾乎相同。
但是,例如,如果我添加一個不可變的選項:
Future {
measure("immutable", () => {
for (i <- 0 until 10) {
val map1 = Map[Int, Int](i -> i)
println(map1)
}
})
}
它總是首先結束。 這是有道理的,因為不可變的 collections 比可變的性能要好得多。
為了獲得更好的性能測試,您可能需要使用一些第三方,例如scalameter或其他存在的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.