Я додав наступні два рядки до вершини мого init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Це означає, що замість того, щоб збирати сміття кожні 800 кб виділеної пам’яті, Emacs робить це в режимі очікування, тобто коли пауза не турбує мене. (Він також збирає після виділення 1 Гб пам'яті, але я не думаю, що це станеться).
Це покращило час мого запуску приблизно на дві третини. Теоретично це також повинно покращити продуктивність в цілому. Чи є якісь недоліки у цього підходу?
(eval-when-compile (* 1024 1024 1024))
з most-positive-fixnum
(будь ласка , зробіть це, я впевнений , що все , хто попадається на ваше запитання копії коду в їх конфігурації) .
gc-cons-threshold
більше, ніж ви готові насправді потрапити в будь-який момент часу, тому що ви повинні припустити, що ви будете реально вражати це значення час від часу (адже хто знає, скільки сміття може бути накопичено деяким несподівано захопленим непрацюючим завданням). Я не бачу особливої проблеми із запуском gc з непрацюючим таймером, але я думаю, що встановити поріг для непрацюючого gc таким високим, як це здається OTT, і моє враження, що значення, ймовірно, було вибрано як "вище, ніж я Мені коли-небудь знадобиться », а не« найвищий, який я готовий використовувати ».