タグ付けされた質問 「performance」

Emacsのパフォーマンス関連の問題のためのものです。起動、ナビゲーション、検索、画面の更新、コンパイル、実行、デバッグなど、パフォーマンスの問題に関するEmacsの側面を示すために、追加のタグを使用します。

10
非常に長い行がEmacsを遅くするのを防ぐにはどうすればよいですか?
訪問しているファイルに含まれる改行の数によって、パフォーマンスが大きく異なります。 以下に例を示します。2つの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 これらは、同じコンテンツを持つ2つのJSONファイルです。one_line.json改行なしの18MiBのJSONです。pretty_printed.json改行と空白が追加され、41MiBになりました。 ただし、多くの行に分割された大きなファイルは、JavascriptモードとFundamentalモードの両方で、Emacsで開く方がはるかに高速です。 Emacsは実際にはバイト数が少ないので、長い行でパフォーマンスが低下するのはなぜですか?Emacsの外部でデータを再フォーマットせずにパフォーマンスを改善するためにできることはありますか?

1
非常に遅いEmacsをトラブルシューティングするにはどうすればよいですか?
私はドキュメントを書いていますが、昨日登場したと思うEmacsのパフォーマンスに問題があります。initファイルに変更を加えたり、新しいパッケージをインストールしたりしていません。 問題は、執筆中に、キーボードの文字を押してから画面に表示するまでに非常に顕著な遅れがあることです。単語を入力し終わった後でも、画面に印刷されているのを見ることがあります。 タイピングの速度以外の問題があるかどうかはわかりませんが(あるとしか推測できません)、気づいていません。 この問題の原因は何ですか? それはEmacsによるものですか、それとも私のPCのパフォーマンスによるものですか?一般的に、Emacsのパフォーマンスに影響する変数は何ですか? 私のEmacsのバージョンはGNU Emacs 24.3.1です 主なアクティブモードは次のとおりです。 ラテックス マイナーアクティブモードは次のとおりです。 オートコンプリート 自動構成 自動圧縮 自動暗号化 点滅カーソル ファイル名シャドー フォントロック グローバルオートコンプリート グローバルフォントロックグローバルHlライン 行番号 マウスホイール Shell-Dirtrack ショーパレン Smartparens Smartparens-Global ツールチップトランジェントマーク

3
起動時間を短縮するにはどうすればよいですか?
起動時間を短縮するためにできる基本的なことは何ですか? その点で、特に注意すべき点はありますか? 注:起動時間は、Emacsをあまり頻繁に起動せず(セッションごとに1回)、実行中のインスタンスでファイルを開くことで軽減できます。この質問は、セッションの開始時、または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は、同じ外部変数で繰り返し使用するのに比べて遅いと考えていました(上記の2番目のケースで行われます)。 すぐ上のコメントについては、それが代替よりも高速であると明示的に言っている(レキシカルバインディングを使用している)場合を除いて、私はそれを何もないとして却下したでしょう。だから...それはなぜですか? 上記のコードは、字句バインディングと動的バインディングのパフォーマンスが異なるのはなぜですか? let字句を使用するとフォームが高速になるのはなぜですか?


1
sortはどのアルゴリズムを使用しますか?
既にソートされているリストに単一の整数を追加して、適切な場所に配置する必要があります。私の最初の考えは次のようなものでした (sort (cons newelt list) #'<) ただし、それlistが既にソートされている場合、実際に必要な挿入は1つだけです。つまり、で使用されるアルゴリズムによっては、このソリューションは恐ろしく不適切になる可能性があります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を設定するだけです。現実には、それはクレイジーな混乱のように見えますが、全体が通常0.5秒未満で読み込まれます。 しかし、時間が経つにつれて、起動時間が微妙に遅くなり、不可解になっていることに気付きました。最終的には、起動時間が1秒以上になるまでになりました。私はついに十分になり、問題の根本を掘り下げました。私は最終的に私の全体のコメントアウト~/.emacsファイルを、その起動時間だったまだ ≥1秒。実際、わずか0.2数秒で削り取られ、時にはそれ以下になりました。その後、私は試しemacs -qてみましたが、起動時間は〜0.1秒でした。 Elispマニュアルのこのセクションを調べてみると、emacs -q起動時間を大幅に短縮した理由がわかりました。明らかにemacs -q、起動時にEmacsが3つのことを行うのを停止します。 初期化ファイルをロードする default.elファイルをロードする 呼ぶ package-initialize 私の全体をコメントアウトして~/.emacsもほとんど何も起こらないので、すでに初期化ファイルを除外しています。私はdefault.elファイルを使用しないので、それも除外されます。これがpackage-initializeパフォーマンスヒットの原因となっています。 なぜpackage-initializeそんなに多くのスタートアップ時間を費やしているのでしょうか?それが私が自分に尋ねた最初の質問でした。すべてをオートロードしませんか?はい、そうです。しかし、それはまさに問題です。 「ポスト」パッケージは、自動ロードファイルの読み取りとロードパスの設定で構成されることを説明するこの投稿を見つけました。これは、多くのパッケージを持っている場合、読み込むべきオートロードファイルと設定するパスが多いため、明らかにI / Oペナルティが発生します。残念ながら、これがないと、オートロードを管理するタスクはユーザーの手に落ちます。言い換えれば、package.elファイルとパスを自動ロードするためにファイルシステムをクロールさせずに、それを自分で管理する必要があり、それは退屈でエラーが発生しやすいプロセスになる可能性があります。 私はその道を進んで行きたくない。現在116個のパッケージがあり、そのうち107個はELPAからのもので、25個は依存パッケージです。この途方もない数が、私のパフォーマンスをひどく低下させているのだと確信しています。しかし、パッケージを削除したくないので、私は困惑しています。 このような状況で、雷の起動時間を取り戻すための救済策はありますか? 更新: この問題を解決するために、Stefan Monnierによるいくつかのパッチ(これらのパッチの説明はこちら)について、メーリングリストで新しいスレッドを開始しました。誰でも彼のパッチをテストしてフィードバックを送ることができます。emacs-devel 別の更新: Stefan Monnierはこの問題にもう関心がないか、私のメッセージを受け取っていないようです。私は前者を信じる傾向がありますが、それは問題ありませんが、そうであれば彼からのある種の反応に感謝します。とにかく、この問題のために彼がこれまでに作成したコードは非常にうまく機能しています。彼の最新のパッチは、ここ(Emacs 25.3用)およびここ(Emacsマスターブランチ用)にあります。彼のパッチのおかげで起動時間に良い改善が見られ、カスタマイズの機能を削除することなく可能な限り最適化されているので、起動時間に満足しています。これらのパッチがいつかEmacsメインラインに組み込まれることを望んでいましたが、私(または他の誰か)は今はStefanの代わりにトーチを取る必要があると思います。メーリングリストには、著作権の割り当てとライセンスに関するスパーが少しありました。最初はそうしなかったが、リチャード・ストールマンや他の人からのコメントのために、著作権の譲渡は当初考えていたほど制限的ではないかもしれない。さらに、著作権の譲渡に代わるものとして、作品をパブリックドメインにコミットすることも可能かもしれません。 いずれにせよ、これまでのパッチについてStefanに感謝します!これらの変更の開発を続けていただければ幸いですが、そうでない場合は大丈夫であり、いつか開発を続けることができます。また、この問題を解決するための洞察と貢献を提供してくれたすべての人に感謝します。 さらに別の更新: うわー、この機能がついに登場し、Emacs 27に搭載されるようです。StefanMonnierに感謝します!

1
`gc-cons-threshold`を非常に高く設定し、アイドル時にガベージを収集することにはマイナス面はありますか?
次の2行をmyの先頭に追加しましたinit.el。 (setq gc-cons-threshold (eval-when-compile (* 1024 1024 1024))) (run-with-idle-timer 2 t (lambda () (garbage-collect))) つまり、割り当てられたメモリの800kbごとにガベージを収集するのではなく、Emacsはアイドル状態、つまり一時停止が気にならないときに収集します。(1GBのメモリを割り当てた後にも収集されますが、そうなるとは思いません)。 これにより、起動時間が約3分の2短縮されました。理論的には、一般にパフォーマンスも改善するはずです。このアプローチには欠点がありますか?

2
MagitはWindowsで非常に遅くなります。最適化する方法
プロジェクトにWindows 10を使用せざるを得ません。はい、むしろGNU / Linuxを使用します。私の正気を保つために、私はWindowsをEmacsのブートローダーと見なそうとしました:) 残念ながら、Magit(Windowsでのコマンドラインの不足を補うEmacsの私のお気に入りの部分の1つ)は、耐えられないほど遅いです。SSD、16 GBのRAM、クアッドコアi7がありますが、小さなリポジトリで実行するには8秒かかり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を使用している人は誰もいません。 この質問は重複していることが示唆されましたが、彼らは尋ねました: UbuntuでのEmacsの起動時間がWindowsよりも著しく短い理由を理解するのに苦労しています。誰もが答えを知っていますか? Emacs、Git、およびMagitがWindowsで遅い理由を少なくともいくつか知っています。Magitを最適化して、機能を犠牲にしている場合でも、より少ないことを実行したり、結果などをキャッシュしたりする方法を尋ねています。

2
劣ったプロセスが長い行を生成するとき、スローダウンを防ぐ方法は?
EmacsをGeiserで使用して、Schemeコードをハックします。REPLで遊んでいると、多くの場合、すべてが1行で出力される式を評価することがあります。 たとえば、SRFI-41(ストリーム)で遊んで、大きなファイルから文字ストリームを作成しました。次に、ストリームを強制し、Geiserはファイルのコンテンツ全体を文字ストリームとしてバッファにバーフしました。ほとんどすぐに、私は保持どのくらいの出力ラインに追加、より多くの文字などの停止、そしてどんなににEmacsの地面が押すC-gかC-c C-c、私は、Emacs(またはガイザー)の停止を行うことができませんでした。 Emacsは私の入力を完全に無視するようになり、この巨大な文字ストリームをすべて1行で無反応のGeiser REPLバッファーに出力することを優先する必要があると考え、Emacsセッション全体を中断しました。 Emacsセッションを破壊的な好奇心から守るためにできることはありますか?(とにかく非常に長い行を表示するときにEmacsが非常に遅くなるのはなぜですか?)

2
組織モードのファイルサイズの実際的な制限は?
私はorg-modeファイルを持っています。このファイルは約6,000行で、トップレベルの見出しが100ほどあります。ロードまたは保存に約1分かかり始め、ときどきemacsを雑草に送信し、強制終了する必要があります。 これは、組織モードで実際に処理するには大きすぎるファイルだと思いますか?大きなファイルの使用経験はありますか?同じような遅延が発生しますか?または、私がインストールした他のすべてのemacsパッケージのように、他の場所で速度低下の原因を調べる必要がありますか?たぶん、私は一般的にあまりにも多くのemacsを求めているのかもしれません。 これは、Mac OS X Mavericksのhomebrew 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))ます。looking-back遅いので、この関数は避けた方がよいとのドキュメントの文字列。私は次のアプローチがより速くなることに興味がありますか? (save-excursion (goto-char (line-beginning-position)) (looking-at regexp stuff))

1
unicode.txtの遅さ
Xahのunicode.txtで(カーソルキーを使用して)ポイントを移動fundamental-modeすると、通常のテキストファイルよりも著しく遅くなります。多くの非ASCII文字が問題ですか?他に何か? バージョン情報:2017-04-24のGNU Emacs 25.2.1(x86_64-w64-mingw32)がオプションで開始 -Q

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.