web-dev-qa-db-ja.com

なぜノーチラスは遅いのですか?

たくさんのファイルを含むディレクトリを開くときに、なぜNautilusが非常に遅いのか疑問に思います。たとえば、私の/ usr/libディレクトリには1900個のファイルがあり、すべてを表示するのに約5秒以上かかります。数ヶ月前にUbuntuをインストールして以来、こんな感じで、とても面倒なこともあります。私は強力なハードウェアを持っていませんが、Windowsエクスプローラーがこれよりもはるかに高速であることを知っています。

それをスピードアップするためにできることはありますか?

Ubuntu 10.04

19
Coding District

nautilusの実行をトレースすると、速度が遅いのは2つの要因の組み合わせによるものであることがわかります。

  • 各ファイルに関する有用な情報を表示するのは賢明です。ファイルの内容を調べて、使用するアイコンを決定し、場合によってはプレビューを表示します。これは、設定でプレビューをオフにすることでトーンダウンできます。

  • 多くの役に立たない作業を行います(各ファイルを複数回statし、ディレクトリ以外の場合でも/proc/filesystemsをチェックするなど)。あなたができることは、プログラミングを学び、プログラムを改善し、パッチを送ることだけです。または、少なくとも作成者に機能リクエストを送信します(より速くしてください)。

  • ディレクトリごとにいくつかの外部プロセスを呼び出しますが、それらが何をするのかについては調べていません。

[編集]-> [設定]の下の[プレビュー]タブで、すべてのオプションを[しない]に切り替えてみてください。

また、「支援技術」をオフにするのにも大いに役立ちました。これは、「システム->環境設定->支援技術」で行うことができます。 「支援技術を有効にする」のチェックを外します。

後者の変更を有効にするには、ログアウトしてから再度ログインする必要があります。

5
Jay

これは、 私が行った話Alexander Larsson 、NautilusおよびGVFSを含む他のプロジェクトの主任開発者を思い出させました。

Giles 彼の答え 、特にNautilusがファイルのコンテンツの内部を調べていることについて、Nautilusが「遅い」主な理由に触れています。ただし、Gilesはなぜこれが遅いのかを説明していません。これは一部の人には明らかかもしれませんが、他の人には明らかではないかもしれません。アレックスが言わなければならなかったことは次のとおりです。

白紙の状態から始めた、つまりファイルシステムにまったくアクセスしていないとします。ここで、stat(“/some/dir/file”)を実行するとします。まず、カーネルはファイルを見つける必要があります。これは技術用語ではiノードと呼ばれます。まず、ルートディレクトリのiノードを格納するファイルシステムスーパーブロックを調べます。次に、ルートディレクトリを開き、「some」を見つけ、それを開き、「dir」などを見つけ、最終的にファイルのiノードを見つけます。

次に、実際にiノードデータを読み取る必要があります。最初に読み取った後、これもRAMにキャッシュされます。したがって、読み取りは1回だけ行う必要があります。

HDを古いレコードプレーヤーのように考えてください。針を適切な場所に配置すると、回転しながらすばやく読み続けることができます。ただし、「シーク」と呼ばれる別の場所に移動する必要があると、まったく異なることをしていることになります。腕を物理的に動かしてから、適切な場所が針の下になるまでプラッターが回転するのを待つ必要があります。この種の物理的な動きは本質的に遅いため、ディスクのシーク時間はかなり長くなります。

それで、私たちはいつ探しますか?もちろん、ファイルシステムのレイアウトによって異なります。ファイルシステムは、読み取りパフォーマンスを向上させるためにファイルを連続して保存しようとします。また、通常、互いに近い単一のディレクトリのiノードも保存しようとしますが、ファイルの書き込み時期、ファイルシステムの断片化などに依存します。したがって、最悪の場合この場合、ファイルの各統計がシークを引き起こし、次にファイルを開くたびに2回目のシークが発生します。したがって、何もキャッシュされていない場合、物事に非常に長い時間がかかるのはそのためです。

一部のファイルシステムは他のファイルシステムよりも優れているため、最適化が役立つ場合があります。あなたはアプリでいくつかのことをすることができます。たとえば、GIOは、受信したiノードをreaddir()からソートしてから、iノード番号がディスクの順序と何らかの関係があることを期待して(通常は関係があります)、ランダムシークを最小限に抑えます。

重要なことの1つは、シークを最小限に抑えるようにデータストレージとアプリを設計することです。 たとえば、Nautilusが/ usr/binを読み取るのが遅いのはこのためです。通常、そこにあるファイルには拡張子がないため、それぞれに魔法のスニッフィングを行う必要があります。したがって、各ファイルを開く必要があります=>ファイルごとに1つのシーク=> slooooow。別の例は、以前のgconfのように、多くの小さなファイルに情報を格納するアプリです。 、また悪い考え。とにかく、実際には、レイテンシーを隠そうとする以外にできることはあまりないと思います。

彼は次のメモで終わりました:

このジレンマ全体の本当の解決策は、回転するメディアから離れることです。 IntelSSDは素晴らしいと聞きました。ライナスは彼らに誓う。

:-)

5

私はついにノーチラスをとても遅くしているものを理解しました:ブックマーク。

これを修正するには、すべてのブックマークを削除し、再起動してから、それなしでは生きていけないブックマークを追加し直します。

Straceを使用して、nautilusがすべてのビューに対して大量のファイルを記述していることに気付きました。トレース中に参照していたディレクトリにないファイルでさえ。 nautilusはこれらのブックマークを事前にキャッシュしようとしていると思います。

ブックマークとして1つのネットワークドライブを持っていました...これが、nautilusのロードに数秒かかった理由である可能性があります。

3
Peter Jenkins

Thunarなどの代替ファイルマネージャーを使用してみてください。 Thunarは、ディレクトリリストの読み込みがはるかに高速で、NTFS USBハードドライブからext4にファイルをコピーするのに安定していますが、ファイルのセットが大きいと、Nautilusのように問題が発生するようです。

スイッチスクリプトのリンクは次のとおりです https://help.ubuntu.com/community/DefaultFileManager

1
mut1na

[編集]-> [設定]の下の[プレビュー]タブで、すべてのオプションを[しない]に切り替えてみてください。

また、「支援技術」をオフにするのにも大いに役立ちました。これは、「システム->環境設定->支援技術」で行うことができます。 「支援技術を有効にする」のチェックを外します。

後者の変更を有効にするには、ログアウトしてから再度ログインする必要があります。

1
wsmart

XfceがGnomeシステムにインストールされていて、使用したことがない場合は、exo-utilsを削除してください

ダウンロード後にファイルを正しく開かないChrome)の問題とともに、私の問題を修正しました。

1
Adam H