1. emacs -Q 2. paste the following code to scratch buffer and execute it for saveral times (benchmark-progn (setq enable-dir-local-variables nil             enable-local-variables nil) (let* ((test-dir "~/source/emacs-git/lisp")              (file-list (directory-files test-dir t                                                        "\\`[fsw].*[.]el\\'" t))              (start-tm (current-time))              end-tm buf buf-list)       (dolist (test-file file-list)        (setq buf (find-file-noselect test-file))        (with-current-buffer buf             (goto-char (point-min))             (while (not (eobp))              (end-of-defun)))        (setq buf-list (cons buf buf-list)))       (setq end-tm (current-time))       (dolist (buf buf-list)        (kill-buffer buf))       (let ((delta (time-subtract end-tm start-tm)))        (message "--- files: %d, delta: %s"                    (length file-list) (float-time delta))))) ======== Result for Emacs 27: ====== --- files: 61, delta: 3.021547 Elapsed time: 3.030485s (0.173305s in 14 GCs) "--- files: 61, delta: 3.021547" --- files: 61, delta: 3.1373 Elapsed time: 3.145406s (0.181551s in 14 GCs) "--- files: 61, delta: 3.1373" --- files: 61, delta: 3.093033 Elapsed time: 3.100581s (0.162783s in 13 GCs) "--- files: 61, delta: 3.093033" ======== Result for Emacs 29: ======= --- files: 61, delta: 5.271817 Elapsed time: 5.278284s (0.174266s in 13 GCs) "--- files: 61, delta: 5.271817" --- files: 61, delta: 4.919798 Elapsed time: 4.923492s (0.162042s in 13 GCs) "--- files: 61, delta: 4.919798" --- files: 61, delta: 5.127965 Elapsed time: 5.131604s (0.154718s in 12 GCs) "--- files: 61, delta: 5.127965" --- files: 61, delta: 4.978964 Elapsed time: 4.982757s (0.149401s in 12 GCs) "--- files: 61, delta: 4.978964" Time used in Emacs 29 is 1.6x than in Emacs 27. They are all built with "-O2". I also tested on Linux. There is no such big regress.