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?
(eval-when-compile (* 1024 1024 1024))
z most-positive-fixnum
(proszę zrobić tak, jestem całkiem pewny, że każdy, kto jest po drugiej stronie kopii zapytania kod do ich konfiguracji) .
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ć”.