Last year I converted my Emacs Literate Configuration File from a complicated document full of out-of-order noweb
objects to a simple sequential document that took the tangle times down from 3-10 minutes (because of how I set up my document not because of Org-Mode itself!!!) down to 30-90 seconds. But who doesn’t want more speed? I didn’t at least until I read this article which led me to reading this article and this page on garbage collection.
I tangle my config files what feels like every few minutes at least when I am playing around with stuff. So here is some code to effectively avoid garbage collection when tangling. It speeds up tangling on my computer when I tangle the same document in a row five or ten times so I’m happy but that clearly isn’t a detailed analysis.
Here is the code:
(setq help/default-gc-cons-threshold gc-cons-threshold) (defun help/set-gc-cons-threshold (&optional multiplier notify) "Set `gc-cons-threshold' either to its default value or a `multiplier' thereof." (let* ((new-multiplier (or multiplier 1)) (new-threshold (* help/default-gc-cons-threshold new-multiplier))) (setq gc-cons-threshold new-threshold) (when notify (message "Setting `gc-cons-threshold' to %s" new-threshold)))) (defun help/double-gc-cons-threshold () "Double `gc-cons-threshold'." (help/set-gc-cons-threshold 2)) (add-hook 'org-babel-pre-tangle-hook #'help/double-gc-cons-threshold) (add-hook 'org-babel-post-tangle-hook #'help/set-gc-cons-threshold)