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

欢迎!有关如何操作的更多信息,请参阅关于页面。

0
打印

我发现pprint在多个地方使用refs和dosync事务,这似乎不是必要的。鉴于打印通常发生在单个线程中,这些似乎可以被atoms或甚至是volatile替换,这可能会显著提高pprint的性能。

2个答案

0
_评论者:killme2008_

我开发了一个补丁来修复这个问题。我在clojure和clojure.data.json中运行了所有测试,没有失败的。

使用criterium进行以下简单基准测试


(使用 'criterium.core)
(要求 '[clojure.data.json :作为 json])
(基准 (json/write-str
  {:a 1 :b 2 :c (range 10) :d "hello world"
   :e (应用 hash-set (range 10))}))


修补前


评估次数:6180060次,在60个样本中,每个样本103001次调用。
             执行时间平均:10.302604 µs
    执行时间标准偏差:597.958933 ns
   执行时间低四分位数:9.631444 µs(2.5%)
   执行时间高四分位数:11.618551 µs(97.5%)
                   使用的开销:1.724553 ns


修补后


评估次数:6000900次,在60个样本中,每个样本100015次调用。
             执行时间平均:10.212543 µs
    执行时间标准偏差:564.874941 ns
   执行时间低四分位数:9.528383 µs(2.5%)
   执行时间高四分位数:11.334033 µs(97.5%)
                   使用的开销:1.827143 ns


0
by
参考:https://clojure.atlassian.net/browse/CLJ-1799(由alexmiller报告)
...