J'ai ajouté les deux lignes suivantes en haut de mon init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Cela signifie qu'au lieu de collecter les ordures tous les 800 Ko de mémoire allouée, Emacs le fait lorsqu'il est inactif, c'est-à-dire lorsque la pause ne me dérange pas. (Il collecte également après l'allocation de 1 Go de mémoire, mais je ne pense pas que cela se produira).
Cela a amélioré mon temps de démarrage d'environ deux tiers. En théorie, cela devrait également améliorer les performances en général. Y a-t-il des inconvénients à cette approche?
gc-cons-threshold
plus haut que vous êtes prêt à frapper effectivement à un moment donné, parce que vous devez supposer que vous allez réellement atteindre cette valeur de temps en temps (après tout, qui sait peut - être accumulé d' ordures par une tâche non inactive enthousiaste inattendue). Je ne vois pas de problème particulier avec le déclenchement de gc avec une minuterie inactive, mais je pense que fixer le seuil pour gc non-inactif aussi haut que cela semble OTT, et mon impression est que la valeur a probablement été choisie comme étant "plus élevée que je aurai jamais besoin de "plutôt que" du plus haut que je suis prêt à utiliser ".(eval-when-compile (* 1024 1024 1024))
parmost-positive-fixnum
(veuillez le faire, je suis sûr que tous ceux qui rencontrent votre question copient votre code dans leur configuration) .Réponses:
Pour autant que je sache, si vous avez la RAM, ça va, mais si Emacs a déjà atteint un niveau d'utilisation très élevé avant le GC, cela pourrait prendre beaucoup de temps. Je ne sais pas exactement ce que veut dire Eli; ISTM que si vous avez assez de mémoire, ça devrait aller, mais c'est l'expert ici.
Cela dit, j'utilise ces lignes dans mon fichier init depuis un certain temps maintenant, et cela aide à réduire le temps de démarrage sans rendre les modifications permanentes:
la source
after-init-hook
?