Agregué las siguientes dos líneas en la parte superior de mi init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Eso significa que en lugar de recolectar basura cada 800kb de memoria asignada, Emacs lo hace cuando está inactivo, es decir, cuando la pausa no me molesta. (También se acumula después de asignar 1 GB de memoria, pero no creo que eso suceda).
Esto mejoró mi tiempo de inicio en aproximadamente dos tercios. En teoría, también debería mejorar el rendimiento en general. ¿Hay alguna desventaja en este enfoque?
(eval-when-compile (* 1024 1024 1024))
con most-positive-fixnum
(realice esta acción, estoy bastante seguro de todo el mundo que viene a través de las copias de interrogación el código en su configuración) .
gc-cons-threshold
más alto de lo que realmente está dispuesto a golpear en cualquier momento dado, porque se debe asumir que va a realmente llegar a ese valor de vez en cuando (después de todo, ¿quién sabe cómo podría devengar mucha basura por alguna tarea inesperadamente entusiasta no inactiva). No veo un problema particular con la activación de gc con un temporizador inactivo, pero creo que establecer el umbral para gc no inactivo tan alto como parece OTT, y mi impresión es que el valor probablemente fue elegido como "más alto que yo" Alguna vez necesitaré "en lugar de" lo más alto que estoy dispuesto a usar ".