Warum dauert der Start von Emacs unter Windows länger als unter Linux?

14

Aufbau:

  • Ein System
  • Betriebssystem Windows 10 als Dual Boot
  • OS Ubuntu 15.10 als Dual Boot
  • Emacs 25.0.1 mit GUI

Ich habe eine dot-emacsDatei und alles in meinem .emacs.dOrdner (die Pakete befinden sich auch in .emacs.d). Alle diese Dateien befinden sich in einem Dropbox-Ordner.

Unter Windows 10: Ich habe das dot-emacsund .emacs.dvom Basisordner in Windows mit den Speicherorten in Dropbox verknüpft .

Unter Linux / Ubuntu 15.10: Ich habe auch den dot-emacsund .emacs.dvon meinem Ubuntu- Ausgangsordner (/ home / user /) zu den Speicherorten in Dropbox verlinkt.

Alle mit Emacs verbundenen Dateien werden in einem Dropbox-Ordner auf verschiedenen Betriebssystemen gespeichert.

Windows und Linux laufen als Dual Boot auf derselben Festplatte, also auch auf derselben Hardware.

Wenn ich Emacs unter Windows starte, dauert der Start 7,4 Sekunden.

Wenn ich Emacs unter Linux starte, dauert der Start nur 2,3 Sekunden.

Dies gilt sowohl für den Emacs mit grafischer Benutzeroberfläche als auch für Version 25.0.1. Beide Betriebssysteme befinden sich auf demselben Computer und auf demselben SSD-Laufwerk. Es ist also auch die gleiche Hardware.

Die folgenden Dinge sind auf dem Betriebssystem (Windows 10 und Ubuntu 15.10) identisch:

  • Emacs-Software, Version 25.0.1
  • Konfigurationsdateien (.emacs.d)
  • Eine Festplatte (alle Dateien in `.emacs.d) und beide Betriebssysteme befinden sich auf derselben SSD).
  • Hardware

Ein Unterschied:

  • Compiled Emacs für Windows oder Linux wird auf Windows- bzw. Linux-Plattformen ausgeführt. Das ist der einzige Unterschied.

Ich habe Probleme zu verstehen, warum Emacs unter Ubuntu merklich kürzere Startzeiten haben als Windows.

ReneFroger
quelle
2
Du hast vergessen zu erwähnen, was für ein Build das ist. Außerdem sollten Sie die Startzeiten einer bloßen Emacs-Sitzung mit denen vergleichen emacs -Q.
Wasamasa
Ich muss (message emacs-init-time)die Startzeit messen. Dies ist meines Wissens nicht an eine Funktion gebunden. Wie könnte ich es emacs -Qdann messen ?
ReneFroger
1
M-x emacs-init-time RET
Giordano
1
Ich sehe dieses Problem auch. Mein Emac braucht 5-6 Sekunden, um unter Linux zu starten, aber bis zu einer Minute unter Windows. Zum Glück ist Windows nicht mein primäres Betriebssystem bei der Arbeit.
Kaushal Modi
1
Es ist, weil GCC, denke ich. Windows Emacs wird in GCC kompiliert, was in Windows nicht besonders ist, es gibt viele Fehler und so weiter. Wenn es eine Möglichkeit gibt, EMACS mit Visual C ++ zu kompilieren, möchte ich die Leistung sehen.
João Paulo Andrade

Antworten:

21

Op-ed: Windows ist nur langsam.

Ich benutze Emacs regelmäßig sowohl unter Windows (Cygwin und native) als auch unter GNU / Linux (Arch), und das habe ich auch bemerkt. Ich glaube, die Antwort ist, dass Linux in vielen Bereichen einfach schneller ist als Windows, insbesondere bei Dateisystemoperationen 1 und Threading / Forking-Operationen 2 .

Ich denke, der Unterschied in der Leistung wird am deutlichsten durch die Verwendung von git und insbesondere von Magit veranschaulicht (da es einige Befehle für den Statuspuffer ausführt). Git ist unter Windows fürchterlich langsam. Tatsächlich ist es so langsam, dass ich unter Windows häufig Code in meinem Dropbox-Ordner bearbeite, darauf warte, dass er mit meinem Linux-VPS synchronisiert wird, und dann Magit über SSH verwende, anstatt ihn einfach unter Windows zu verwenden.

Tun time git statusauf dem Emacs Master Zweig dauert durchschnittlich 0,025 Sekunden auf Bogen für mich. Unter Windows (nativ) dauert es 0,075 bis 0,100 Sekunden, unter Windows (cygwin) 0,200 Sekunden. Das scheint nicht viel zu sein, aber das bedeutet, dass es unter Windows 3-4x langsamer ist.

Ich sollte auch beachten, dass bestimmte Antivirensoftware (insbesondere McAfee) massive Verlangsamungen verursachen kann. Wenn der On-Access-Scanner von McAfee aktiviert ist, geht es mir merklich langsamer. Cygwins git statuskann bis zu 2 Minuten dauern! Erst nach dem Ausschalten erhalte ich die oben angegebenen Zeiten.


Nebenbei: Ich habe gerade die Variable gefunden magit-refresh-verbose, die mal den Status aktualisiert. Hier einige Male, um den magit-statusPuffer im Emacs-Hauptzweig zu aktualisieren:

Windows (native)

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, schlechtere Hardware, 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)

Cygwins höhere Geschwindigkeit überraschte mich.

  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

Kindermädchen
quelle
Haben Sie versucht, den Pfad für git-bezogene Befehle hinzuzufügen exec-path? ( stackoverflow.com/questions/16884377/… ) In meinem Fall hat sich die Geschwindigkeit erheblich verbessert.
joon
1
@joon Ja, alle relevanten Pfade befinden sich bereits in meinem exec-path.
Kindermädchen
Ich verstehe - ich sollte dies auch in einer Linux-Box testen. Vielen Dank!
joon
@joon Kein Problem. Wenn Sie einen Weg finden, dies unter Windows zu beschleunigen, lassen Sie es mich bitte wissen. Es ist wirklich ein Schmerz.
Kindermädchen
1
Aber die Frage bleibt bestehen ... auch ohne Git, warum ist Emacs unter Windows merklich langsamer?
ReneFroger
0

Vielleicht können Sie versuchen, den Emacs-Server so einzurichten, dass Sie eine bessere Erfahrung haben. Wenn Sie diesen Ansatz verwenden oder Emacs als Daemon ausführen, können Sie mit Emacsclient neue Fenster starten, ohne eine andere Emacs-Instanz zu laden. Es ist ein schöner Ansatz. Ich habe es nicht in Windows getestet, aber hier ist ein Link, der erklärt, wie man es benutzt. Ich hoffe es hilft dir, Mann.

Emacs Server

Sebas
quelle