Come posso risolvere un Emacs molto lento?


42

Sto scrivendo un documento e ho un problema con la performance di Emacs che penso sia apparso proprio ieri. Non ho apportato alcuna modifica al mio file init o installato nuovi pacchetti.

Il problema è che mentre scrivo, c'è un notevole ritardo tra la pressione delle lettere sulla tastiera e la loro visualizzazione sullo schermo. A volte li guardo continuare a stampare sullo schermo dopo aver finito di digitare la parola.

Non so se ci sono altri problemi tranne la velocità di digitazione (posso solo immaginare che ci siano) ma non li ho notati.

Cosa può causare questo problema?
È causato da Emacs o è dovuto alle prestazioni del mio PC? In generale, quali sono le variabili che influenzano le prestazioni di Emacs?

La versione di My Emacs è GNU Emacs 24.3.1

La principale modalità attiva è:

  1. LaTeX

e le modalità secondarie attive sono:

  1. Auto-Complete
  2. Auto-Composition
  3. Auto-compressione
  4. Auto-Encryption
  5. Blink-Cursore
  6. File-Name-ombra
  7. Font-Lock
  8. Global-Auto-Complete
  9. Global-Font-Lock Global-Hl-Line
  10. Line-number
  11. Rotellina del mouse
  12. Shell-Dirtrack
  13. Show-Paren
  14. Smartparens
  15. Smartparens-Global
  16. Descrizione comando Transient-Mark

5
C-h mrivelerà la modalità principale e tutte le modalità secondarie attive. Puoi disabilitare lentamente ogni modalità minore fino a quando non rintracci la causa. Potrebbe essere la modalità principale stessa, ma le modalità secondarie sono i sospetti più probabili. Senza specificare quali modalità stai usando, chiunque qui sarebbe solo pugnalato al buio a quello che sta succedendo con il tuo problema. Ho una situazione rara che si verifica con alcune immagini speciali, ad esempio quando qualcuno mi invia un'e-mail con un simbolo del telefono o altri simboli speciali nell'iPhone, ma questo è un problema di rallentamento isolato causato da simboli speciali.
elenco delle leggi

2
linum-moderallenta le prestazioni in buffer di grandi dimensioni. nlinum-modescritto da Stefan è meglio per buffer più grandi.
elenco delle leggi

Cosa sta succedendo sul tuo computer? Quanta memoria viene utilizzata? Quanto è attiva la tua CPU e quali programmi sono responsabili della maggior parte del suo utilizzo? Il problema potrebbe anche essere un altro programma.
Dave,

2
Oh, ho appena pubblicato questo riferimento in un'altra discussione: gnu.org/software/emacs/manual/html_node/elisp/Profiling.html - questo sarebbe un buon inizio. Inoltre, uno scatto al buio: prova a disabilitare il font-lock gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html - questo è il mio primo sospetto abituale (che spesso giustamente occupa la maggior parte dei cicli della CPU ).
wvxvw,

1
Il solo numero di suggerimenti in questi commenti mostra che questa domanda è un po 'troppo vaga. Ho riformulato il titolo per chiedere istruzioni, anziché una soluzione. Ho anche fornito una risposta di conseguenza. Per favore, fai una nuova domanda dopo aver seguito queste istruzioni o lascia un commento se non erano chiari.
Malabarba,

Risposte:


65

Cosa può causare questo problema? È causato da Emacs o è dovuto alle prestazioni del mio PC? In generale, quali sono le variabili che influenzano le prestazioni di Emacs?

Emacs ha circa 50.000 variabili interne e alcune migliaia di pacchetti esterni con una media di alcune decine di variabili ciascuna, non puoi aspettarti che qualcuno risponda a questo in senso generale. :-)

Puoi vederlo semplicemente guardando il thread dei commenti sotto la tua domanda. Ci sono una mezza dozzina di suggerimenti diversi, tutti ugualmente validi.

Cosa puoi fare per individuare il problema?

Opzione 1: disabilitare le modalità

Inizia a disabilitare le modalità secondarie che hai elencato e scopri quale risolve il problema di prestazioni. Vorrei iniziare con smartparens, auto-complete, line-numbere font-lock, quindi seguire l'elenco.

"Non ho avuto questo problema ieri" significa molto poco, non fare troppo affidamento su di esso . Inizia a disabilitare le modalità secondarie fino a quando qualcosa non lo risolve.

Se nessuna delle modalità secondarie risolve il tuo problema, inizia a commentare parti del tuo file init fino a quando non scopri quale frammento sta causando questo. In ogni caso, fai una nuova domanda quando hai qualcosa di più specifico.

Opzione 2: il profiler

  1. Richiama M-x profiler-start RET RET(il secondo RETè confermare cpu);
  2. Fai un po 'di battitura, preferibilmente un intero paragrafo o più;
  3. Invoca M-x profiler-report.

Questo ti darà un buffer che descrive il tempo di CPU impiegato da ciascuna funzione. Colpire TABsu una linea lo espande per visualizzare le funzioni al suo interno. Naviga questo buffer fino a scoprire quale funzione sta impiegando così tanto tempo CPU.

Cosa faccio dopo?

Una volta trovata la funzione, il pacchetto o lo snippet che causa il ritardo, puoi (in nessun ordine particolare):

  • Poni qui una nuova domanda relativa a quella specifica modalità minore (o funzione o snippet).
  • Segnala un bug al manutentore del pacchetto.
    • Controlla i commenti nella parte superiore del file di origine del pacchetto. Se contiene un URL (specialmente su github), probabilmente c'è un tracker dei problemi lì.
    • Alcuni pacchetti offrono un comando simile M-x PACKAGE-bug-report.
    • La sua e-mail dovrebbe trovarsi nella parte superiore del file sorgente del pacchetto.
  • Se è un pacchetto integrato, puoi segnalarlo con M-x report-emacs-bug.
  • Anche per i pacchetti che non sono integrati, puoi chiedere aiuto alla help-gnu-emacsmailing list.

4
Queste sono ottime istruzioni. Grazie mille! Come ho detto nei commenti della mia domanda, non sapevo che sarebbe stato vago. Ho pensato che la risposta sarebbe stata elementare per qualcuno esperto di Emacs (come molti di voi lo sono). Comunque questa "guida" è fantastica e sono felice che la mia domanda porti a questo. :)
Adam,

3
+100000 per l'utilizzo del profiler. Se sei sciocco (come me) e fai accidentalmente qualcosa come aggiungere una costosa chiamata di funzione alla linea di modalità in ogni buffer, questo è sicuramente il modo di capire cosa sta succedendo.
Radon Rosborough,

Come si disabilita la modalità secondaria? Modalità secondarie abilitate: Pacchetto Async-Bytecomp Completamento automatico Composizione automatica Compressione automatica File-Nome-Ombra Flycheck Flyspell Font-Lock Global-Auto-Complete Global-Auto-Revert Global-Eldoc Global-Flycheck Global-Font-Lock Global -Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum Line-Number Linum Magit-Auto-Revert Org-Bullets Org-Indent Override-Global Projectile Pyvenv recentf Save-Place Shell-Dirtrack Show-Paren Show-Smartparens Show-Smartparens-Global Dimensione-Indicazione Smartparens Smartparens-Global
Stryker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.