Dodałem następujące dwie linie na górze mojej init.el
:
(setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024)))
(run-with-idle-timer 2 t (lambda () (garbage-collect)))
Oznacza to, że zamiast zbierać śmieci co 800 KB przydzielonej pamięci, Emacs robi to w stanie bezczynności, tj. Gdy wstrzymywanie mi nie przeszkadza. (Zbiera się również po przydzieleniu 1 GB pamięci, ale nie sądzę, aby tak się stało).
Poprawiło to mój czas uruchamiania o około dwie trzecie. Teoretycznie powinno to również ogólnie poprawić wydajność. Czy są jakieś wady tego podejścia?
gc-cons-threshold
wyższych wartości, niż jesteś w stanie w danym momencie trafić, ponieważ powinieneś założyć, że od czasu do czasu osiągniesz tę wartość (w końcu kto wie, ile śmieci może zostać zgromadzonych przez jakieś nieoczekiwanie entuzjastyczne, nieużywane zadanie). Nie widzę szczególnego problemu z wyzwalaniem gc z bezczynnym zegarem, ale myślę, że ustawienie progu dla nie-bezczynności gc tak wysoko, jak to wydaje się OTT, i mam wrażenie, że wartość została prawdopodobnie wybrana jako „wyższa niż ja” „Zawsze będę potrzebować”, a nie „najwyższej, z jakiej jestem gotów korzystać”.(eval-when-compile (* 1024 1024 1024))
zmost-positive-fixnum
(proszę zrobić tak, jestem całkiem pewny, że każdy, kto jest po drugiej stronie kopii zapytania kod do ich konfiguracji) .Odpowiedzi:
O ile mi wiadomo, jeśli masz pamięć RAM, jest w porządku, ale jeśli Emacs kiedykolwiek miał bardzo wysokie zużycie przed GC'ing, może to zająć dużo czasu. Nie jestem pewien, co dokładnie znaczy Eli; ISTM, że jeśli masz wystarczającą ilość pamięci, powinno być w porządku, ale on jest tutaj ekspertem.
Powiedziawszy to, używałem już tych wierszy w moim pliku init i pomaga to skrócić czas uruchamiania bez powodowania trwałych zmian:
źródło
after-init-hook
?