Tại sao Emacs mất nhiều thời gian để khởi động trên Windows hơn trên Linux?


14

Cấu hình:

  • Một hệ thống
  • Hệ điều hành Windows 10 dưới dạng khởi động kép
  • Hệ điều hành Ubuntu 15.10 là khởi động kép
  • Emacs 25.0.1 với GUI

Tôi có một dot-emacstập tin và mọi thứ trong .emacs.dthư mục của tôi (các gói cũng được đặt trong .emacs.d). Tất cả các tệp này được đặt trong một thư mục Dropbox.

Trên Windows 10: Tôi đã liên kết dot-emacs.emacs.dtừ thư mục chính trong Windows đến các vị trí trong Dropbox.

Trên Linux / Ubuntu 15.10: Tôi cũng đã liên kết dot-emacs.emacs.dtừ thư mục nhà Ubuntu của tôi (/ home / user / đến các vị trí trong Dropbox.

Vì vậy, tất cả các tệp liên quan đến Emacs, được lưu trữ trong một thư mục Dropbox trên các hệ thống hoạt động khác nhau.

Windows và Linux đang chạy dưới dạng khởi động kép trên cùng một đĩa, phần cứng cũng vậy.

Khi tôi khởi động Emacs trên Windows, phải mất 7,4 giây để bắt đầu.

Khi tôi khởi động Emacs trên Linux, chỉ mất 2,3 giây để bắt đầu.

Cả hai đều có Emacs với GUI đồ họa và phiên bản 25.0.1. Cả hai hệ điều hành được đặt trên cùng một máy tính trên cùng một ổ SSD. Vì vậy, nó cũng là phần cứng tương tự.

Những điều sau đây giống hệt nhau trên hệ điều hành (Windows 10 và Ubuntu 15.10):

  • Phần mềm Emacs, phiên bản 25.0.1
  • Tệp cấu hình (.emacs.d)
  • Một ổ cứng (tất cả các tệp bên trong `.emacs.d) và cả hai hệ điều hành đều nằm trên cùng một ổ SSD).
  • Phần cứng

Một điểm khác biệt:

  • Trình biên dịch Emacs cho Windows hoặc Linux đang chạy trên nền tảng Windows hoặc Linux tương ứng. Đó là sự khác biệt duy nhất.

Tôi đang đấu tranh để hiểu tại sao Emacs có thời gian khởi động trên Ubuntu ngắn hơn đáng kể so với Windows.


2
Bạn đã quên đề cập đến những gì xây dựng này là. Ngoài ra, bạn nên so sánh thời gian khởi động của phiên Emacs trần với emacs -Q.
wasamasa

Tôi cần (message emacs-init-time)đo thời gian khởi động. Điều này không bị ràng buộc với một chức năng như tôi biết. Vì vậy, làm thế nào tôi có thể đo nó với emacs -Qsau đó?
ReneFroger

1
M-x emacs-init-time RET
giordano

1
Tôi cũng thấy vấn đề này .. emacs của tôi mất 5-6 giây để khởi động Linux, nhưng tối đa một phút trên Windows. Rất may, Windows không phải là hệ điều hành chính của tôi tại nơi làm việc.
Kaushal Modi

1
Đó là bởi vì GCC tôi đoán. Windows Emacs được biên dịch trong GCC, không tuyệt vời trong windows, có nhiều lỗi và v.v. Nếu có một cách để biên dịch EMACS bằng C ++ trực quan, tôi muốn xem hiệu suất.
João Paulo Andrade

Câu trả lời:


21

Op-ed: Windows chỉ chậm.

Tôi thường xuyên sử dụng Emacs trên cả Windows (Cygwin và bản địa) và GNU / Linux (Arch) và tôi cũng nhận thấy điều này. Tôi tin rằng câu trả lời là Linux chỉ đơn giản là nhanh hơn Windows trong nhiều lĩnh vực, đáng chú ý nhất là trong các hoạt động của hệ thống tệp 1 và các hoạt động xâu chuỗi / xâu chuỗi 2 .

Tôi nghĩ rằng sự khác biệt về hiệu suất được thể hiện rõ nhất khi sử dụng git và đặc biệt là Magit (vì nó chạy khá nhiều lệnh cho bộ đệm trạng thái của nó). Git chậm kinh khủng trên Windows. Trên thực tế, nó quá chậm đến nỗi tôi thường chỉnh sửa mã trên Windows trong thư mục Dropbox của mình, đợi nó được đồng bộ hóa với VPS Linux của tôi và sau đó sử dụng Magit qua SSH, thay vì chỉ sử dụng nó trên Windows.

Làm time git statustrên nhánh chính Emacs mất trung bình 0,025 giây trên Arch đối với tôi. Trên Windows (bản địa), phải mất 0,075-0,100 giây, Windows (cygwin) 0,200 giây. Điều đó có vẻ không nhiều, nhưng điều đó có nghĩa là nó chậm hơn 3-4 lần trên Windows.

Tôi cũng cần lưu ý rằng một số phần mềm chống vi-rút (cụ thể là McAfee) có thể gây ra sự chậm chạp lớn. Với tính năng Quét trên truy cập của McAfee, mọi thứ trở nên chậm hơn rõ rệt đối với tôi. Cygwin git statuscó thể mất tới 2 phút! Chỉ sau khi tắt nó, tôi mới nhận được những lần tôi đã nêu ở trên.


Ngoài ra: Tôi chỉ tìm thấy biến magit-refresh-verbose, lần này trạng thái làm mới. Dưới đây là một số lần để làm mới magit-statusbộ đệm trên nhánh chính của Emacs:

Windows (bản địa)

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, phần cứng tệ hơn, 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)

Tốc độ nhanh hơn của Cygwin làm tôi ngạc nhiên.

  1. http://www.sl slideshoware.net/PrincipledTechnology/compared-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


Bạn đã thử thêm đường dẫn cho các lệnh liên quan đến git exec-pathchưa? ( stackoverflow.com/questions/16884377/ ) Trong trường hợp của tôi, nó đã cải thiện tốc độ đáng kể.
joon

1
@joon Vâng, tất cả các đường dẫn có liên quan đã có trong tôi exec-path.
mẫu

Tôi thấy - tôi cũng nên kiểm tra điều này trong một hộp linux. Cảm ơn!
joon

@joon Không sao. Nếu bạn tìm cách tăng tốc độ này trên Windows, vui lòng cho tôi biết. Đó thực sự là một nỗi đau.
mẫu

1
Nhưng câu hỏi vẫn tồn tại .. ngay cả khi không có Git, tại sao Emacs lại chậm hơn đáng kể trên Windows?
ReneFroger

0

Có lẽ bạn có thể thử thiết lập emacs-server để bạn có thể có trải nghiệm tốt hơn. Sử dụng phương pháp này hoặc chạy emacs như một daemon, bạn chỉ có thể sử dụng emacsclient để bắt đầu các cửa sổ mới không tải một thể hiện emacs khác. Đó là một cách tiếp cận tốt đẹp. Tôi chưa thử nghiệm nó trong Windows nhưng đây là liên kết giải thích cách sử dụng nó. Tôi hy vọng nó sẽ giúp bạn người đàn ông.

Máy chủ Emacs

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.