我發現用Enum.map |> Enum.sum
的計數比Enum.count
的計算速度快得多。但爲什麼不是內置計數函數有效?爲什麼Enum.map比Elixir中的Enum.count更高效?
比較以下兩行:
len | map(), µs | count(), µs
===============================
10 | 0.67 | 2.55
100 | 5.52 | 8.91
1000 | 59.00 | 73.12
10000 | 642.50 | 734.60
源代碼:https://gist.github.com/artemrizhov/fc146f7ab390f7a807be833099e5cb83
$ elixir --version
Erlang/OTP 19 [erts-8.1] [source-e7be63d] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]
Elixir 1.3.4
是您的代碼依賴於枚舉代碼的性能公關?因爲除非真的如此重要,否則這會讓我以理解爲代價進行優化。我的意思是,對於維護這段代碼的人來說,通過'Enum.count'和'Enum.map |> Enum.sum'可以更容易地找出你正在做什麼。所以除非這個代碼的性能很重要,否則我會選擇前者。 –
是的,我的代碼依賴於這個函數的性能。我創建了自己的count()函數,以便代碼保持可讀性。 – raacer