Pourquoi Emacs met-il plus de temps à démarrer sous Windows que sous Linux?


14

Configuration:

  • Un système
  • OS Windows 10 en double démarrage
  • OS Ubuntu 15.10 en double démarrage
  • Emacs 25.0.1 avec GUI

J'ai un dot-emacsfichier et tout dans mon .emacs.ddossier (les packages sont également situés dans .emacs.d). Tous ces fichiers se trouvent dans un dossier Dropbox.

Sous Windows 10: j'ai créé un lien symbolique entre le dot-emacset .emacs.dle dossier de départ de Windows et les emplacements de Dropbox.

Sous Linux / Ubuntu 15.10: J'ai également créé un lien symbolique vers dot-emacset .emacs.ddepuis mon dossier d'accueil Ubuntu (/ home / user /) vers les emplacements de Dropbox.

Ainsi, tous les fichiers liés à Emacs sont stockés dans un dossier Dropbox sur différents systèmes d'exploitation.

Windows et Linux fonctionnent en double démarrage sur le même disque, donc également le même matériel.

Lorsque je démarre Emacs sur Windows, il faut 7,4 secondes pour démarrer.

Lorsque je démarre Emacs sous Linux, il ne prend que 2,3 secondes pour démarrer.

C'est à la fois avec Emacs avec une interface graphique et la version 25.0.1. Les deux systèmes d'exploitation sont situés sur le même ordinateur sur le même lecteur SSD. C'est donc aussi le même matériel.

Les éléments suivants sont identiques sur le système d'exploitation (Windows 10 et Ubuntu 15.10):

  • Logiciel Emacs, version 25.0.1
  • Fichiers de configuration (.emacs.d)
  • Un disque dur (tous les fichiers à l'intérieur de `.emacs.d) et les deux OS sont sur le même SSD).
  • Matériel

Une différence:

  • Emacs compilés pour Windows ou Linux fonctionne respectivement sur la plate-forme Windows ou Linux. Voilà la seule différence.

J'ai du mal à comprendre pourquoi Emacs a un temps de démarrage sensiblement plus court sur Ubuntu que sur Windows.


2
Vous avez oublié de mentionner de quelle construction il s'agit. En outre, vous devriez comparer les temps de démarrage d'une session Emacs nue avec emacs -Q.
wasamasa

J'ai besoin de (message emacs-init-time)pour mesurer le temps de démarrage. Pour autant que je sache, cela n'est pas lié à une fonction. Alors, comment pourrais-je le mesurer emacs -Qalors?
ReneFroger

1
M-x emacs-init-time RET
giordano

1
Je vois aussi ce problème .. mon emacs prend 5-6 secondes pour démarrer sous Linux, mais jusqu'à une minute sous Windows. Heureusement, Windows n'est pas mon principal système d'exploitation au travail.
Kaushal Modi

1
C'est parce que GCC je suppose. Windows Emacs est compilé dans GCC, ce qui n'est pas génial dans Windows, il y a beaucoup de bugs et ainsi de suite. S'il existe un moyen de compiler EMACS avec Visual C ++, j'aimerais voir les performances.
João Paulo Andrade

Réponses:


21

Op-ed: Windows est juste lent.

J'utilise régulièrement Emacs sur Windows (Cygwin et natif) et GNU / Linux (Arch), et je l'ai également remarqué. Je crois que la réponse est que Linux est tout simplement plus rapide que Windows dans de nombreux domaines, notamment dans les opérations de système de fichiers 1 et les opérations de threading / forking 2 .

Je pense que la différence de performances est illustrée de la manière la plus notable lors de l'utilisation de git, et en particulier de Magit (car il exécute plusieurs commandes pour son tampon d'état). Git est horriblement lent sur Windows. En fait, c'est si lent que j'édite souvent du code sous Windows dans mon dossier Dropbox, j'attends qu'il soit synchronisé avec mon VPS Linux, puis j'utilise Magit via SSH, au lieu de simplement l'utiliser sous Windows.

Faire time git statussur la branche principale Emacs prend en moyenne 0,025 seconde sur Arch pour moi. Sur Windows (natif), cela prend 0,075-0,100 secondes, Windows (cygwin) 0,200 secondes. Cela peut ne pas sembler beaucoup, mais cela signifie que c'est 3-4x plus lent sous Windows.

Je dois également noter que certains logiciels antivirus (McAfee, en particulier) peuvent provoquer des ralentissements massifs. Avec le scanner sur accès de McAfee activé, les choses sont sensiblement plus lentes pour moi. Cygwin git statuspeut prendre jusqu'à 2 minutes! Ce n'est qu'après l'avoir éteint que j'obtiens les heures indiquées ci-dessus.


En plus: je viens de trouver la variable magit-refresh-verbosequi actualise le statut. Voici quelques instants pour une actualisation du magit-statustampon sur la branche maître Emacs:

Windows (natif)

GNU Emacs 24.5.1 (i686-pc-mingw32) of 2015-04-11 on LEG570
Magit 20151028.1649, Git 2.6.1.windows.1, Emacs 24.5.1
Refreshing buffer `*magit: emacs'...done (9.317s)
Refreshing buffer `*magit: emacs'...done (9.318s)
Refreshing buffer `*magit: emacs'...done (9.357s)

Windows (cygwin)

GNU Emacs 25.0.50.1 (i686-pc-cygwin) of 2015-07-29 on NAND-LT
Magit 20151015.22, Git 2.5.0.234.gefc8a62, Emacs 25.0.50.1
Refreshing buffer `*magit: emacs'...done (4.609s)
Refreshing buffer `*magit: emacs'...done (4.720s)
Refreshing buffer `*magit: emacs'...done (4.626s)

GNU / Linux (Arch, pire matériel, VPS)

GNU Emacs 25.0.50.6 (x86_64-unknown-linux-gnu, GTK+ Version 3.18.2) of 2015-10-26
Magit 20151028.1649, Git 2.6.2, Emacs 25.0.50
Refreshing buffer ‘*magit: emacs’...done (0.517s)
Refreshing buffer ‘*magit: emacs’...done (0.507s)
Refreshing buffer ‘*magit: emacs’...done (0.523s)

La vitesse plus rapide de Cygwin m'a surpris.

  1. http://www.slideshare.net/PrincipledTechnologies/comparing-file-system-performance-red-hat-enterprise-linux-6-vs-microsoft-windows-server-2012

  2. /programming/12878980/speed-performance-of-a-qt-program-windows-vs-linux


Avez-vous essayé d'ajouter le chemin d'accès aux commandes liées à git exec-path? ( stackoverflow.com/questions/16884377/… ) Dans mon cas, cela a considérablement amélioré la vitesse.
Joon

1
@joon Oui, tous les chemins pertinents sont déjà dans mon exec-path.
nounou

Je vois - je devrais également tester cela dans une boîte Linux. Merci!
Joon

@joon Pas de problème. Si vous trouvez un moyen d'accélérer cela sous Windows, faites-le moi savoir. C'est vraiment une douleur.
nounou

1
Mais la question se pose toujours .. même sans Git, pourquoi Emacs est-il sensiblement plus lent sous Windows?
ReneFroger

0

Vous pouvez peut-être essayer de configurer emacs-server afin que vous puissiez avoir une meilleure expérience. En utilisant cette approche ou en exécutant emacs en tant que démon, vous pouvez simplement utiliser emacsclient pour démarrer de nouvelles fenêtres sans charger une autre instance emacs. C'est une belle approche. Je ne l'ai pas testé sous Windows mais voici un lien qui explique comment l'utiliser. J'espère que ça vous aide mec.

Serveur Emacs

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.