Ich habe die folgenden zwei Zeilen oben in meine eingefügt init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Das bedeutet, dass Emacs nicht alle 800 KB des zugewiesenen Speichers den Müll einsammelt, sondern im Leerlauf, wenn mich das Anhalten nicht stört. (Es sammelt sich auch nach der Zuweisung von 1 GB Speicher, aber ich glaube nicht, dass das passieren wird).
Dies verbesserte meine Startzeit um ungefähr zwei Drittel. Theoretisch sollte es auch die Leistung im Allgemeinen verbessern. Gibt es Nachteile bei diesem Ansatz?
gc-cons-threshold
nicht höher als Sie bereit sind, tatsächlich zu einem bestimmten Zeitpunkt getroffen, da sollten Sie davon ausgehen , dass Sie wird tatsächlich diesen Wert ab und zu schlagen (denn wer weiß , wie viel Müll könnte auflaufen durch eine unerwartet begeisterte nichtleerlaufende Aufgabe). Ich sehe kein besonderes Problem beim Auslösen von gc mit einem Leerlauf-Timer, aber ich denke, die Schwelle für nicht-Leerlauf-gc so hoch einzustellen, wie dies OTT scheint, und mein Eindruck ist, dass der Wert wahrscheinlich als "höher als ich" gewählt wurde Ich brauche immer "anstatt" das Höchste, das ich verwenden möchte ".(eval-when-compile (* 1024 1024 1024))
mitmost-positive-fixnum
(tun Sie dies bitte, ich bin ziemlich sicher , dass jeder, der über Ihre Frage Kopien kommt Ihr Code in ihre config) .Antworten:
Soweit ich weiß, ist es in Ordnung, wenn Sie über RAM verfügen, aber wenn Emacs vor dem GC-Vorgang jemals eine sehr hohe Auslastung aufwies, kann dies lange dauern. Ich weiß nicht genau, was Eli meint. ISTM, wenn Sie genug Gedächtnis haben, sollte es okay sein, aber er ist der Experte hier.
Allerdings habe ich diese Zeilen in meiner Init-Datei schon eine Weile verwendet, und es hilft, die Startzeit zu verkürzen, ohne die Änderungen dauerhaft zu machen:
quelle
after-init-hook
?