Good call. Got the time down with SBCL to 3.5 seconds. So still more than twice Java. ABCL with the same code with the big file (5.8G) is around 110+ seconds.
I'm still surprised by ABCL being SO much slower than SBCL especially with Java being faster than SBCL.
Thoughts?
Thanks, Garrett.
P.S. I also took the "time" out, I am doing SBCL/ABCL the same way as I did in Java with the getting the start time before reading and getting the time after reading. and calculating the duration that way. It didn't make any difference that I could see in the times.
Lisp code: (with-open-file (stream "/media/danger/OS/temp/great_expectations.iso" :element-type '(unsigned-byte 8) :external-format 'iso-8859-1) ; jars.txt iso-8859-1 also tried :default and the time was the same (let ((size (file-length stream)) (buffer-size (* 16 1024 1024)) ; 16M (start (get-internal-real-time)) ) (loop with buffer = (make-array buffer-size :element-type '(unsigned-byte 8)) for n-characters = (read-sequence buffer stream) while (< 0 n-characters)) (format t "took ~,2f secs" (/ (- (get-internal-real-time) start) internal-time-units-per-second)) ))
On Fri, Oct 21, 2022 at 2:52 PM Pascal Bourguignon pjb@informatimago.com wrote:
Le 21/10/2022 à 23:18, Garrett Dangerfield a écrit :
I tried changing (make-array buffer-size :element-type 'character) to (make-array buffer-size :element-type 'byte) and I got additional warnings and it took 70 seconds instead of 20.
You need to specify a binary file too!
(deftype octet () '(unsigned-byte 8)) (with-open-file (stream #P"~/Downloads/Discord.dmg" :element-type 'octet :external-format :default) (print `(size = ,(file-length stream))) (let ((buffer-size (* 16 1024 1024))) (time (loop with buffer = (make-array buffer-size :element-type 'octet) for n-bytes = (read-sequence buffer stream) while (plusp n-bytes)))))
-- __Pascal Bourguignon__