评论者:gshayban
嗯,我无法重现你的结果。
我不确定你是否用lein测试,在什么平台上,什么jvm选项。
我们能用这个小框架直接测试clojure.jar而不是直接测试吗?我已经附加了这个框架和两次运行结果(一个默认堆,另一个3GB G1GC的堆)
我还添加了中等和小的(范围)。
从经验上看,除了小块范围之外,doseq2在每个案例中都优于其他。使用criterium观察到,性能差距更大,更有利于doseq2。
我将结果并排粘贴以便于查看。
`
core/doseq doseq2
"消耗时间:1610.865146毫秒" "消耗时间:2315.427573毫秒"
"消耗时间:2561.079069毫秒" "消耗时间:2232.479584毫秒"
"消耗时间:2446.674237毫秒" "消耗时间:2234.556301毫秒"
"消耗时间:2443.129809毫秒" "消耗时间:2224.302855毫秒"
"消耗时间:2456.406103毫秒" "消耗时间:2210.383112毫秒"
;; 中等范围,绑定少
core/doseq doseq2
"消耗时间:28.383197毫秒" "消耗时间:31.676448毫秒"
"消耗时间:13.908323毫秒" "消耗时间:11.136818毫秒"
"消耗时间:18.956345毫秒" "消耗时间:11.137122毫秒"
"消耗时间:12.367901毫秒" "消耗时间:11.049121毫秒"
"消耗时间:13.449006毫秒" "消耗时间:11.141385毫秒"
;; 小范围,绑定少
core/doseq doseq2
"消耗时间:0.386334毫秒" "消耗时间:0.372388毫秒"
"消耗时间:0.10521毫秒" "消耗时间:0.203328毫秒"
"消耗时间:0.083378毫秒" "消耗时间:0.179116毫秒"
"消耗时间:0.097281毫秒" "消耗时间:0.150563毫秒"
"消耗时间:0.095649毫秒" "消耗时间:0.167609毫秒"
;; 小未分块可减少,绑定少
core/doseq doseq2
"消耗时间:2.351466毫秒" "消耗时间:2.749858毫秒"
"消耗时间:0.755616毫秒" "消耗时间:0.80578毫秒"
"消耗时间:0.664072毫秒" "消耗时间:0.661074毫秒"
"消耗时间:0.549186毫秒" "消耗时间:0.712239毫秒"
"消耗时间:0.551442毫秒" "消耗时间:0.518207毫秒"
core/doseq doseq2
"消耗时间:95.237101毫秒" "消耗时间:55.3067毫秒"
"消耗时间:41.030972毫秒" "消耗时间:30.817747毫秒"
"消耗时间:42.107288毫秒" "消耗时间:19.535747毫秒"
"消耗时间:41.088291毫秒" "消耗时间:4.099174毫秒"
"消耗时间:41.03616毫秒" "消耗时间:4.084832毫秒"
;; 小块分片可减少,绑定少
core/doseq doseq2
"消耗时间:31.793603毫秒" "消耗时间:40.082492毫秒"
"消耗时间:17.302798毫秒" "消耗时间:28.286991毫秒"
"消耗时间:17.212189毫秒" "消耗时间:14.897374毫秒"
"消耗时间:17.266534毫秒" "消耗时间:10.248547毫秒"
"消耗时间:17.227381毫秒" "消耗时间:10.022326毫秒"
;; 绑定更多
core/doseq doseq2
"消耗时间:4.418727毫秒" "消耗时间:2.685198毫秒"
"已过时间:2.421063 毫秒" "已过时间:2.384134 毫秒"
"已过时间:2.210393 毫秒" "已过时间:2.341696 毫秒"
"已过时间:2.450744 毫秒" "已过时间:2.339638 毫秒"
"已过时间:2.223919 毫秒" "已过时间:2.372942 毫秒"
core/doseq doseq2
"已过时间:28.869393 毫秒" "已过时间:2.997713 毫秒"
"已过时间:22.414038 毫秒" "已过时间:1.807955 毫秒"
"已过时间:21.913959 毫秒" "已过时间:1.870567 毫秒"
"已过时间:22.357315 毫秒" "已过时间:1.904163 毫秒"
"已过时间:21.138915 毫秒" "已过时间:1.694175 毫秒"
`