Ce code est très lent. L'exécution du slime-repl sur mon netbook prend quelques minutes.Problème de performance avec 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))
A l'inverse, ce code fonctionne très vite:
(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)))
Est-ce que cela a quelque chose à voir avec des séquences chunked? Mon premier exemple vient-il d'être mal écrit?
Merci pour le lien. Je pensais que cela pourrait être une réflexion, mais je ne reçois aucun avertissement de réflexion? Une idée pourquoi pas? – dbyrne
Apparemment '* warn-on-reflection *' ne dit pas toujours toute l'histoire ... Voir aussi http://clj-me.cgrand.net/2009/08/06/what-warn-on-reflection- doesnt-tell-you-about-arrays/ –
Avec Clojure 1.2, vous devriez obtenir plus d'avertissements de réflexion sur les tableaux. – cgrand