如何解决非常慢的Emacs?


41

我正在写文档,我对Emacs的性能有疑问,我认为这是昨天才出现的。我没有在我的init文件中进行任何更改或安装任何新软件包。

问题是,在我写作时,在按下键盘上的字母和将它们显示在屏幕上之间存在非常明显的滞后。有时,我在输入完单词后会看到它们仍在屏幕上打印。

我不知道是否还有其他问题,除了打字速度(我只能猜测是有问题)之外,但我没有注意到它们。

什么会导致此问题?
是由Emacs引起还是由于我的PC的性能?通常,哪些因素会影响Emacs的性能?

我的Emacs版本是GNU Emacs 24.3.1

主要活动模式是:

  1. 胶乳

次要活动模式为:

  1. 自动完成
  2. 自动合成
  3. 自动压缩
  4. 自动加密
  5. 闪烁光标
  6. 文件名阴影
  7. 字体锁定
  8. 全局自动完成
  9. 全局字体锁定全局高线
  10. 电话号码
  11. 鼠标滚轮
  12. 贝壳目录
  13. 表演派
  14. Smartparens
  15. 全球Smartparens
  16. 工具提示瞬变标记

5
C-h m将显示主要模式和所有活动的次要模式。您可以缓慢禁用每个次要模式,直到找到原因为止。它可能是主要模式本身,但次要模式是最有可能的嫌疑人。如果不指定您使用的是哪种模式,这里的任何人都将在暗中刺痛您的问题。在某些特殊图像上,我遇到一种罕见的情况-例如,当某人通过电子邮件向我发送带有电话符号或iPhone中其他特殊符号的内容时-但这是由特殊符号引起的孤立的减速问题。
法律列表

2
linum-mode降低大型缓冲区的性能。 nlinum-modeStefan写的比较适合较大的缓冲区。
法律列表

您的计算机上正在发生什么?正在使用多少内存?您的cpu有多活跃?哪些程序负责其大部分使用?问题可能出在其他程序上。
戴夫

2
哦,我刚刚在另一个线程中发布了此参考:gnu.org/software/emacs/manual/html_node/elisp/Profiling.html-这将是一个好的开始。另外,请在黑暗中试一试:尝试禁用字体锁定gnu.org/software/emacs/manual/html_node/emacs/Font-Lock.html-这是我的第一个常见疑问(通常有理由占用大多数CPU周期)。
wvxvw 2014年

1
这些评论中的大量建议表明,这个问题有点太含糊。我将标题改写为要求说明,而不是解决方案。我也相应地提供了答案。遵循这些说明后,请提出一个新问题,如果不清楚,请发表评论。
马拉巴巴2014年

Answers:


64

什么会导致此问题?是由Emacs引起还是由于我的PC的性能?通常,哪些因素会影响Emacs的性能?

Emacs大约有50,000个内部变量和数千个外部程序包,平均每个程序包有几十个变量,您不能指望有人从一般意义上回答这个问题。:-)

您只需查看问题下方的评论主题即可看到。那里有六种不同的建议,它们都同样有效。

您可以采取什么措施找出问题所在?

选项1:停用模式

开始禁用您列出的那些次要模式,然后看看哪种模式可以解决您的性能问题。我将以,,和开头smartparens,然后再跟随列表。auto-completeline-numberfont-lock

“昨天我没有这个问题”的意思很小,不要太依赖。刚开始禁用次要模式,直到有问题解决为止。

如果没有任何次要模式可以解决您的问题,请开始注释掉init文件的各个部分,直到找出导致此问题的代码段。无论如何,如果您有更具体的问题,请提出一个新问题。

选项2:分析器

  1. 调用M-x profiler-start RET RET(第二个RET是确认cpu);
  2. 做一些打字,最好是整段或更多;
  3. 调用M-x profiler-report

这将为您提供一个缓冲区,描述每个函数占用的cpu时间。击中TAB一行将展开它以显示其中的功能。浏览此缓冲区,直到找出哪个功能占用大量CPU时间。

之后我该怎么办?

一旦找到导致延迟的函数,程序包或代码段,您就可以(无特定顺序):

  • 在此询问有关该特定次要模式(或功能或代码段)的新问题。
  • 向程序包维护者报告错误。
    • 检查包源文件顶部的注释。如果它包含URL(特别是在github上),则可能存在问题跟踪器。
    • 有些软件包提供类似的命令M-x PACKAGE-bug-report
    • 他或她的电子邮件应位于软件包源文件的顶部。
  • 如果是内置软件包,则可以使用进行报告M-x report-emacs-bug
  • 即使对于非内置软件包,也可以在help-gnu-emacs邮件列表中寻求帮助。

4
这些是很好的指示。非常感谢你!正如我在评论中所说的那样,我不知道它会变得模糊。我认为答案对于Emacs专家(像你们中的许多人一样)是基本的。无论如何,这份“指南”很棒,我很高兴看到我的问题。:)
亚当

3
+100000使用分析器。如果您很愚蠢(像我一样)并且不小心执行了一些操作,例如在每个缓冲区的模式行中添加了昂贵的函数调用,那么肯定可以确定发生了什么。
Radon Rosborough

您如何禁用次要模式?启用的次要模式:异步字节压缩包自动完成自动组合自动压缩文件名阴影Flycheck Flyspell字体锁定全局自动完成全局自动恢复全局Eldoc全局Flycheck全局字体锁定全局-Git-Commit Global-Hl-Line Global-Hungry-Delete Global-Linum行号Linum Magit-自动还原Org-Bullets Org-Indent覆盖-Global Projectile Pyvenv Latestf保存位置Shell-Dirtrack Show-Paren Show-Smartparens Show-Smartparens-Global尺寸指示Smartparens Smartparens-Global
Stryker
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.