2024 Clojure 状态调查 中分享您的想法!

欢迎!请查阅 关于 页面获取更多关于如何使用此网站的信息。

0
Clojure
关闭
clojure.set/map-invert 的两个性能改进

1) 使用 reduce-kv 避免从输入映射中实例化 mapentry
2) 使用短暂创建输出映射

*性能:*


(使用 'criterium.core)
(导入 '[clojure.set :as set]))
(定义 m1 (zipmap (range 1) (range 1)))
(定义 m10 (zipmap (range 10) (range 10)))
(定义 m100 (zipmap (range 100) (range 100)))
(定义 m1000 (zipmap (range 1000) (range 1000)))
(quick-bench (set/map-invert m1000))
(quick-bench (set/map-invert m100))
(quick-bench (set/map-invert m10))
(quick-bench (set/map-invert m1))

;; 意味着之前:  138 ns  1.8 µs  20.6 µs  304 µs
;; 意味着之后:   151 ns  1.3 µs   9.0 µs  126 µs


*补丁:* clj-1808-map-invert-should-use-reduce-kv-and-transient.patch

*审核人员:* Alex Miller
关闭注释: 已在 1.11.0-alpha3 中修复

2 个答案

0

评论者:alexmiller

很想看到将前后时间进行比较的快速性能测试。

0
参考: https://clojure.atlassian.net/browse/CLJ-1808 (报告人:tonsky)
...