My own tests shows that the transient version is twice as fast: (time (dotimes [_ 1000000] (assoc [1 2 3 4 5 6 7 8 9 0] 3 5 6 8))) Elapsed time: 711.848312 msecs
(time (dotimes [_ 1000000] (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3 5 6 8)))) Elapsed time: 399.466556 msecs Luc P. > user=> (use '[criterium.core]) > nil > user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a)) ;;2 operations > > Evaluation count : 125829120 in 60 samples of 2097152 calls. > Execution time mean : 488.826554 ns > Execution time std-deviation : 19.952095 ns > Execution time lower quantile : 459.910320 ns ( 2.5%) > Execution time upper quantile : 527.008269 ns (97.5%) > nil > user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3 > nil 6 'a))) > Evaluation count : 97399860 in 60 samples of 1623331 calls. > Execution time mean : 639.789263 ns > Execution time std-deviation : 26.265080 ns > Execution time lower quantile : 597.753127 ns ( 2.5%) > Execution time upper quantile : 687.838668 ns (97.5%) > nil > user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5)) ;;4 > operations > Evaluation count : 68275920 in 60 samples of 1137932 calls. > Execution time mean : 901.407416 ns > Execution time std-deviation : 35.682637 ns > Execution time lower quantile : 851.060950 ns ( 2.5%) > Execution time upper quantile : 970.492949 ns (97.5%) > > Found 1 outliers in 60 samples (1.6667 %) > low-severe 1 (1.6667 %) > Variance from outliers : 25.4849 % Variance is moderately inflated by > outliers > nil > user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3 > nil 6 'a 0 "z" 2 5))) > Evaluation count : 68844120 in 60 samples of 1147402 calls. > Execution time mean : 893.798444 ns > Execution time std-deviation : 24.566655 ns > Execution time lower quantile : 848.307600 ns ( 2.5%) > Execution time upper quantile : 952.841308 ns (97.5%) > > Found 13 outliers in 60 samples (21.6667 %) > low-severe 7 (11.6667 %) > low-mild 6 (10.0000 %) > Variance from outliers : 14.2244 % Variance is moderately inflated by > outliers > nil > user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5 4 (atom > []) 7 "v")) ;;6 operations > Evaluation count : 39783840 in 60 samples of 663064 calls. > Execution time mean : 1.480511 us > Execution time std-deviation : 50.249443 ns > Execution time lower quantile : 1.425053 us ( 2.5%) > Execution time upper quantile : 1.591407 us (97.5%) > nil > user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3 > nil 6 'a 0 "z" 2 5 4 (atom []) 7 "v"))) > Evaluation count : 44755020 in 60 samples of 745917 calls. > Execution time mean : 1.358394 us > Execution time std-deviation : 49.723547 ns > Execution time lower quantile : 1.306456 us ( 2.5%) > Execution time upper quantile : 1.473882 us (97.5%) > nil > > user=> (bench (assoc [1 2 3 4 5 6 7 8 9 0] 3 nil 6 'a 0 "z" 2 5 4 (atom > []) 7 "v" 5 1200 8 -1111)) ;;8 operations > Evaluation count : 31457280 in 60 samples of 524288 calls. > Execution time mean : 1.907389 us > Execution time std-deviation : 74.523511 ns > Execution time lower quantile : 1.822336 us ( 2.5%) > Execution time upper quantile : 2.076044 us (97.5%) > nil > user=> (bench (persistent! (assoc! (transient [1 2 3 4 5 6 7 8 9 0]) 3 > nil 6 'a 0 "z" 2 5 4 (atom []) 7 "v" 5 1200 8 -1111))) > Evaluation count : 37739640 in 60 samples of 628994 calls. > Execution time mean : 1.623599 us > Execution time std-deviation : 68.677518 ns > Execution time lower quantile : 1.529454 us ( 2.5%) > Execution time upper quantile : 1.777040 us (97.5%) > > Found 1 outliers in 60 samples (1.6667 %) > low-severe 1 (1.6667 %) > Variance from outliers : 28.6901 % Variance is moderately inflated by > outliers > nil > > > etc etc... > > you get the idea...conclusion: there is no real benefit to using > transients for less than 6 operations... > > Jim > > > > > On 08/11/12 23:04, Philip Potter wrote: > > > > Share the benchmark! > > > > In theory, conversion to and from transients should be constant time > > operations, but it would not surprise me if in practice transients > > aren't universally faster than persistent. > > > > Performance in different environments varies wildly, so I would doubt > > results from a small benchmark on a single machine are universally > > applicable. > > > > Benchmarking is hard, particularly on the jvm. Caching and dynamic > > inlining and Hotspot confuse matters greatly. > > > > Phil > > > > On Nov 8, 2012 10:49 PM, "Jim - FooBar();" <jimpil1...@gmail.com > > <mailto:jimpil1...@gmail.com>> wrote: > > > > Some quick benchmarking that I did, showed that it is actually > > more expensive to convert to transient, conj/assoc and convert > > back to persistent than the regular conj/assoc unless you want to > > do more than 8 operations at a time (preferably more than that). > > My experiments were on vectors and the vararg version of assoc/assoc!. > > > > any thoughts? would you agree? > > > > Jim > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clojure@googlegroups.com > > <mailto:clojure@googlegroups.com> > > Note that posts from new members are moderated - please be patient > > with your first post. > > To unsubscribe from this group, send email to > > clojure+unsubscr...@googlegroups.com > > <mailto:clojure%2bunsubscr...@googlegroups.com> > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clojure@googlegroups.com > > Note that posts from new members are moderated - please be patient > > with your first post. > > To unsubscribe from this group, send email to > > clojure+unsubscr...@googlegroups.com > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en -- Softaddicts<lprefonta...@softaddicts.ca> sent by ibisMail from my ipad! -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en