Đoạn mã này là rất chậm. Thực hiện từ slime-repl trên netbook của tôi mất một vài phút.Vấn đề về hiệu suất với Clojure Array
(def test-array (make-array Integer/TYPE 400 400 3))
(doseq [x (range 400), y (range 400), z (range 3)]
(aset test-array x y z 0))
Ngược lại, mã này chạy rất nhanh:
(def max-one (apply max (map (fn [w] (apply max (map #(first %) w))) test-array)))
(def max-two (apply max (map (fn [w] (apply max (map #(second %) w))) test-array)))
(def max-three (apply max (map (fn [w] (apply max (map #(last %) w))) test-array)))
Điều này có cái gì để làm với chuỗi chunked? Ví dụ đầu tiên của tôi có được viết sai không?
Cảm ơn bạn đã liên kết. Tôi nghĩ nó có thể là sự phản chiếu, nhưng tôi không nhận được bất kỳ cảnh báo phản chiếu nào? Bất kỳ ý tưởng tại sao không? – dbyrne
Rõ ràng là '* cảnh báo-trên-phản ánh *' không phải lúc nào cũng kể toàn bộ câu chuyện ... Xem thêm http://clj-me.cgrand.net/2009/08/06/what-warn-on-reflection- doesnt-tell-you-about-arrays/ –
Với Clojure 1.2 bạn sẽ nhận được nhiều cảnh báo phản chiếu hơn trên mảng. – cgrand