Questions tagged «performance»

用于与Emacs性能相关的问题。使用其他标签来指示性能问题与Emacs的哪些方面有关:启动,导航,搜索,屏幕更新,编译,执行,调试等。

10
如何防止过长的行使Emacs变慢?
我看到的性能差别很大,这取决于我要访问的文件中有多少个换行符。 这是一个例子。我有两个JSON文件: $ wget https://github.com/Wilfred/ReVo-utilities/blob/a4bdc40dd2656c496defc461fc19c403c8306d9f/revo-export/dictionary.json?raw=true -O one_line.json $ python -m json.tool <one_line.json >pretty_printed.json 这是两个具有相同内容的JSON文件。one_line.json是JSON的18MiB,没有任何换行符。pretty_printed.json添加了换行符和空格,使其成为41MiB。 但是,在Emacs中以Javascript模式和Fundamental模式打开时,分成多行的较大文件的速度要快得多。 为什么Emacs的行数这么少,但实际上它的字节数却少呢?在不重新格式化Emacs外部数据的格式的情况下,我能做些什么来提高性能?

1
如何解决非常慢的Emacs?
我正在写文档,我对Emacs的性能有疑问,我认为这是昨天才出现的。我没有在我的init文件中进行任何更改或安装任何新软件包。 问题是,在我写作时,在按下键盘上的字母和将它们显示在屏幕上之间存在非常明显的滞后。有时,我在输入完单词后会看到它们仍在屏幕上打印。 我不知道是否还有其他问题,除了打字速度(我只能猜测是有问题)之外,但我没有注意到它们。 什么会导致此问题? 是由Emacs引起还是由于我的PC的性能?通常,哪些因素会影响Emacs的性能? 我的Emacs版本是GNU Emacs 24.3.1 主要活动模式是: 胶乳 次要活动模式为: 自动完成 自动合成 自动压缩 自动加密 闪烁光标 文件名阴影 字体锁定 全局自动完成 全局字体锁定全局高线 电话号码 鼠标滚轮 贝壳目录 表演派 Smartparens 全球Smartparens 工具提示瞬变标记

3
我怎样做才能加快启动速度?
我可以做些基本的事情来减少启动时间? 就此而言,我是否需要特别注意什么? 注意:可以通过减少启动Emacs的频率(每次会话一次)并在正在运行的实例中打开文件来减少启动时间。这个问题是关于最小化启动时间,会话启动或需要启动Emacs的任何其他时间。 另请参见在Stack Overflow上回答的同一问题,问答得分超过50和30多个“收藏夹”书签。好的答案应该超出Stack Overflow的可用范围。

3
为什么“ let”在词法范围内更快?
在阅读dolist宏的源代码时,我遇到了以下注释。 ;; 这不是一个可靠的测试,但这并不重要,因为两种语义都可以接受,其中一种在动态作用域下会更快,而另一种在词法作用域下会更快(并且具有更清晰的语义)。 其中提到了此代码段(为清楚起见,我对其进行了简化)。 (if lexical-binding (let ((temp list)) (while temp (let ((it (car temp))) ;; Body goes here (setq temp (cdr temp))))) (let ((temp list) it) (while temp (setq it (car temp)) ;; Body goes here (setq temp (cdr temp))))) 看到let循环中使用了某种形式,这让我感到惊讶。我曾经认为,与setq在相同的外部变量上重复使用相比,这比较慢(就像上面第二种情况一样)。 我本可以将其视为无用,如果不是在其上方的注释中明确表示,这比替代方法(带有词法绑定)要快。所以...为什么呢? 为什么上面的代码在词法绑定和动态绑定方面的性能有所不同? 为什么let用词法形式更快?

4
如何衡量elisp代码的性能?
如何衡量我的elisp代码的性能?我可以使用哪些工具/外部软件包来衡量花费的时间? 除了总时间外,我还可以查看显示每个功能花费时间的配置文件吗?我也可以分析内存使用情况吗?

1
排序使用什么算法?
我需要向已排序的列表中添加一个整数,以便将其放在正确的位置。我的第一个强项是 (sort (cons newelt list) #'<) 但是,鉴于list已经排序,实际上只需要一个插入,这意味着取决于所使用的算法,该解决方案可能非常不合适sort。 那么,使用哪种算法sort? 我会做以下更好的方法吗? (let ((tail list)) ;; The first element is never less-than (while (and tail (< newelt (cadr tail))) (setq tail (cdr tail))) (setcdr tail (cons newelt (cdr tail))) list)

2
尽管有很多软件包,如何改善启动时间?
TL; DR我的软件包太多,以至于影响了我的启动时间。如果您不相信这种情况,请继续阅读。 我的Emacs启动时间非常短。我不使用use-package,我只是设置了很多钩子和autoloads,所以几乎所有代码都被推迟了。实际上,整个过程加载起来通常不到半秒,尽管看上去好像一团糟。 然而,随着时间的推移,我发现我的启动时间变细慢,令人费解。最终达到启动时间≥1秒的程度。我终于受够了,我深入探究了问题的根源。我最终注释掉了我的整个~/.emacs文件,发现启动时间仍然 ≥1秒。实际上,它只减少了大约0.2几秒钟,有时甚至更少。然后,我尝试emacs -q发现启动时间为〜0.1秒。 通过阅读Elisp手册的这一部分,我发现了为什么要这么emacs -q减少启动时间。显然emacs -q阻止了Emacs在启动时做三件事: 加载您的初始化文件 加载default.el文件 呼唤 package-initialize 我们已经排除了我的init文件,因为注释掉我的整个文件~/.emacs几乎没有任何作用。我不使用default.el文件,因此也排除了该文件。这package-initialize是造成性能下降的罪魁祸首。 为什么package-initialize要占用这么多启动时间?那是我问自己的第一个问题。我不是自动加载所有内容吗?嗯,是。但是,这恰恰是问题。 我发现这篇文章解释了“激活”软件包包括读取自动加载文件和设置加载路径。当您有许多软件包时,这显然会导致I / O损失,因为您有许多要读取的自动加载文件和许多设置路径。不幸的是,没有这个,管理自动加载的任务就落在用户手中。换句话说,在不让package.el爬网文件系统自动加载文件和路径的情况下,我必须亲自管理该过程,这可能是一个乏味且容易出错的过程。 我宁愿不走那条路。我目前有116个软件包,其中有107个来自ELPA,其中25个是依赖项。我确信这个惊人的数字是对我的表现造成如此严重的影响。但是我很困惑,因为我不想删除任何软件包。 在这种情况下是否有任何补救措施可以使我的闪电启动时间恢复原状? 更新: 我们已经开始了一个新的线程上emacs-devel关于邮件列表的一些 补丁由斯特凡Monnier的(这些补丁的描述是这里)来解决这个问题。欢迎任何人测试他的补丁并提供反馈。 另一个更新: 似乎Stefan Monnier对这个问题不再感兴趣,或者他没有收到我的消息。我倾向于相信前者,这很好,尽管在这种情况下,我将感谢他的某种回应。无论如何,到目前为止,他为该问题编写的代码都运行良好。他的最新补丁可以在此处(对于Emacs 25.3)和此处(对于Emacs master分支)找到。由于有了他的补丁程序,我在启动时间上看到了很好的改进,并且我对启动时间感到满意,因为它在不减少自定义功能的情况下尽可能地得到了优化。我希望这些修补程序能够在某个时候进入Emacs主线,但我想我(或其他人)现在必须为此承担火炬,而不是Stefan。在邮件列表中,我们有些关于版权转让和许可的问题。最初,我对此感到不舒服,但是由于理查德·斯托曼(Richard Stallman)和其他人的一些评论,版权分配可能没有我最初想象的那么严格。此外,我可能有可能将我的作品提交到公共领域,以替代版权转让。 无论如何,感谢Stefan到目前为止的补丁!我希望您会继续开发这些更改,但是如果没有,那就可以了,我可能会在某个时候继续开发它。我还要感谢其他所有为解决此问题提供见识和贡献的人。 另一个更新: 哇,该功能终于登陆了,将在Emacs 27中使用。感谢Stefan Monnier!

1
将gc-cons-threshold设置得很高并在闲置时收集垃圾有任何不利之处吗?
我在我的顶部添加了以下两行init.el: (setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024))) (run-with-idle-timer 2 t (lambda () (garbage-collect))) 这意味着Emacs不会在闲置时(即当暂停不打扰我时)这样做,而不是每分配800KB的内存收集垃圾。(它还会在分配1GB内存后收集,但我认为不会发生这种情况)。 这将我的启动时间缩短了大约三分之二。从理论上讲,它还应该总体上提高性能。这种方法有不利之处吗?

2
Magit在Windows中极慢。我该如何优化?
我被迫将Windows 10用于一个项目。是的,我宁愿使用GNU / Linux。为了保持理智,我尝试将Windows视为Emacs的引导程序:) 不幸的是,Magit(我最喜欢的Emacs部分之一,它也弥补了Windows上缺少良好的命令行)的速度令人难以忍受。我有一个SSD,16 GB的RAM和一个四核i7,但是在小型存储库上执行需要八秒钟magit-status。然后,当我要进行另一个更改时,每个文件大约需要5秒钟。 这是我尝试过的: $ git config --global core.preloadindex true $ git config --global core.fscache true $ git config --global gc.auto 256 将整个项目添加到Windows Defender(我唯一的AV)排除列表中 设置为magit-git-executable我下载的常规msysgit(https://git-for-windows.github.io/)。我检查了一下,git status这花费了不到1秒的时间。我知道这样magit-status做的确更多,但这太多了。 任何人都可以提出一些方法来加快速度吗?我无法想象像这样在Windows上使用Magit的人。 有人建议这个问题是重复的,但他们问: 我在努力理解为什么Emacs在Ubuntu上的启动时间比Windows短得多。有人知道答案吗? 我至少知道为什么Emacs,Git和Magit在Windows上速度较慢的一些原因。我在问我如何优化Magit以减少工作量或缓存结果等,即使这是以功能为代价的。

2
下等工序产生长线时,如何防止减速?
我将Emacs与Geiser结合使用以破解一些Scheme代码。当我在REPL中玩耍时,有时我会评估会产生大量输出的表达式,通常都是一行。 例如,我只是玩SRFI-41(流),并从一个大文件创建了一个字符流。然后我强制了流,Geiser将文件的全部内容作为字符流倒入了我的缓冲区。几乎立即,随着越来越多的字符附加到输出行,Emacs停顿了下来,无论我持续按下多长时间C-g还是C-c C-c无法使Emacs(或Geiser)停止。 这打断了我的整个Emacs会话,因为Emacs现在完全忽略了我的输入,认为它需要优先考虑将这一庞大的字符流全部打印到无响应的Geiser REPL缓冲区中。 有什么我可以保护我的Emacs会话免受破坏性好奇心的吗?(为什么在显示很长的行时Emacs为什么会变得这么慢?)我可以设置长行的限制并告诉Emacs根本不尝试显示很长的行是可以的吗?

2
组织模式文件大小的实际限制?
我有一个组织模式文件,该文件运行约6,000行,其中包含约一百个顶级标题。它开始需要大约一分钟的时间来加载或保存,有时它会将emacs发送到杂草中,我不得不强行退出。 你们中有人认为这个文件太大而无法在组织模式下处理吗?您是否有使用大文件的经验?您是否遇到相同类型的延迟?还是应该像其他我安装的其他emacs软件包一样,在其他地方寻找导致速度慢的原因?也许我只是在问太多emacs。 这是Mac OS X Mavericks上的自制emacs 24.4。

1
优化字体锁定性能
我想执行锚字体锁定匹配的变体。我有以名称列表开头的函数定义,并且我希望这些名称在函数体内突出显示。 我已经创建了一个执行此操作的函数,并使用jit-lock-register将其注册为jit-lock函数,但是,性能相当差,并且较大文件中的滚动滞后。 如何评估效果?如果我只是在一个大文件上调用函数(前后有浮动时间,或者有elp),那么我得到的性能将发生巨大变化,这需要0.65到12秒的时间。有推荐的基准测试字体锁定性能的方法吗? 在font-lock-keywords中定义的锚定匹配器与通过jit-lock-register添加功能之间在性能上有什么区别吗? 编辑:似乎性能的变化与垃圾回收有关,我的jit-lock函数的调用每次调用都会逐渐变慢,直到运行垃圾回收为止,此时它们又变快了。

1
Emacs本身是否有任何预先存在的基准套件?
(此问题与编写基准/概要分析elisp代码无关,请参阅此问题。) 是否存在针对Emacs性能的基准套件?我正在寻找与V8解释器团队的标准基准或pypy团队的基准套件相同的东西。 我希望能够回答“ Emacs 24.4比24.3快吗?”之类的问题。 是否有现有的基准套件?

1
“回顾”效果
我有一些使用的代码(looking-back … (line-beginning-position))。Doc字符串looking-back说明,由于速度慢,最好避免使用此功能。我很好奇以下方法会更快吗? (save-excursion (goto-char (line-beginning-position)) (looking-at regexp stuff))

1
unicode.txt缓慢
Xah的unicode.txt中的点(使用光标键)移动fundamental-mode明显比普通文本文件慢。问题是许多非ASCII字符吗?还要别的吗? 关于:2017年4月24日的GNU Emacs 25.2.1(x86_64-w64-mingw32)以选项开头 -Q
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.