LionのFinderリストビューを変更して、「すべてのサイズを計算」を飛躍的に高速化したのはなぜですか。


10

Mac OS Xが登場するずっと前から、問題のFinderウィンドウの各フォルダに含まれる読み取り可能なファイルサイズスペースの合計を決定するために、Finderにすべてのサイズ計算するよう依頼することができました。

Finder-リストビュー-ビューオプションを表示-すべてのサイズを計算

SSDが存在するかどうかに関係なく、いくつかのMacでフォルダーのリストビューのサイズをテストしましたが、Lionはサイズの計算が非常に高速なので、新しいキャッシュデータ構造があるか、FinderがSpotlightまたは同様のデータベースからのメタデータ情報。この計算を大幅に高速化します。


1
あなたはその窓をどこで手に入れましたか?下部の「デフォルトとして使用」ボタンに基づいて、「表示オプションの表示」ウィンドウ(<kbd>⌘J</ kbd>)のように見えますが、下部に何も表示されませんでした。
Cajunluke 2012年

1
@CajunLukeでは、[ビューオプションの表示]ウィンドウを開く前に、ウィンドウビューをリストに切り替える必要があります。
pdd 2012年

回答:


3

初めてフォルダー内のサイズを計算するときに、Lionがフォルダー(およびパッケージ/バンドル)のサイズを計算する速度が速くなることを確認していません。ただし、同じフォルダーでの後続の計算ははるかに高速のようです。

認識された迅速さの一部は、Finderがフォルダサイズを再計算している間、Finderが計算されるまで「-」ではなく、以前に計算されたサイズを灰色のテキストですぐに表示することです。フォルダのサイズが再計算されると、数値が更新され(サイズが変更されている場合)、黒くなります。

Finderは以前に計算されたフォルダサイズを監視可能にキャッシュしているため、前回の計算以降に変更されたフォルダのサイズのみを再計算している可能性があります。


これが問題の核心だと思います。キャッシングははるかに優れており、部分的または古い結果が段階的に表示されます。表示されているデータを入力するためにアルゴリズムが微調整されているかどうかはわかりませんが、キャッシュだけで、実際にどのように機能するかを知ることができます。
bmike

これを数か月間注意深く観察した後、あなたは完全に正しいです。キャッシュメカニズムは非常に優れているので、私がしばらく使用していたMacでは、このデータはほとんど常に正確で瞬時です。OSが情報を完全に収集する必要があるため、再インストールまたは連合の直後の新しいMacでのみ、古い速度が顕著になります。
bmike

7

Lion以前は、Finder.appの[ファイルサイズ]列に、正確なファイルサイズではなく、各ファイルがハードディスク上で必要とするサイズが表示されていました。たとえば、1バイトのファイルは、実際にはHFSフォーマットのシステムで4 KBのスペースを占めるため、4 KBとして表示されていました。情報を見る(または使用して、その後Terminal.appのように、別のアプリを使用して>オープニングファイル以外の1バイトの実際のファイルサイズを参照する簡単な方法はありませんでしたls -lsa、などFinder.app交換TotalFinder.appが)。

(当時、私はこれをbugreport.apple.comのバグ8926275として報告しました。)

Lionでは、この動作が修正されており、[ファイルサイズ]列には、ハードディスクに割り当てられたサイズ(とにかくファイルシステムによって異なります)ではなく、各ファイルの正確なファイルサイズが表示されます。

これらのサイズは、lsターミナルのバイナリから取得するのと同じ数値であるため、計算する方がはるかに効率的です。


1
これも素晴らしいディテールです。SSDが普及し、スナップショットによってストレージがより洗練されてきたので、ファイルの特定のインスタンスが占有しているスペースの量について心配するのをやめ、物理的なファイルとは対照的にファイルの論理的なサイズについて心配しているため、それは長い年月だと思います。
bmike

分かりません。それはどのように効率的ですか?1つのstat(2)呼び出しで両方の番号を取得する必要はありませんか?そして、ls(1)私はそれが関連性の理由はわかりませんので、すべてのバンドル/パッケージ/フォルダの実際のサイズを表示しません。
Ken

@Ken lsは、通常のファイルでは問題なくファイルサイズを表示します。stat単一のファイルに対して同じことができます。私のポイントは、バンドル/パッケージ/フォルダーのサイズを計算するために必要な「余分な作業」は、バンドル/パッケージ/フォルダーに対してのみ必要になり、通常のファイルに対しては不要になったということです。
Mathias Bynens 2012年

Mathias:はい、lsバンドルではなく通常のファイルのファイルサイズを表示します(私が言ったとおりです)。これは、を呼び出すことによって行われstatます。以前に通常のファイルに必要だった「余分な作業」は何ですか?1回のstat呼び出しで、ブロック(st_blocks)とバイト(st_size)の両方が返されます。
Ken

1

Spotlightメタデータを使用してファイルサイズをキャッシュしていたとしても、私は驚かないでしょう。すでにFSEventsを使用してファイルシステムのすべての変更を追跡し、(場合によっては)Time Machineを使用してそれらのすべての変更をバックアップしている場合、総ファイルサイズの計算と保存にかかる追加のコストはごくわずかです。


メタデータなどの場合、fs_eventsを使用してBeanをこぼすことができるかどうかを確認します。スポットライトデータを読み取ってみたいのですが、まだ直接の証拠はありません。
bmike

1

OS X Lion以降、Appleは、OSがSpotlightなどのシステム機能のファイル追跡に使用するSQLiteデータベースを追加しました。毎回ファイルシステムを検査するのではなく、SQLiteデータベースからクエリを実行すると、パフォーマンスが向上する可能性が高くなります。John SiracusaのOS X Lionレビューでは、Lionのファイルシステムの変更について詳しく説明しています。特に、ここでは新しいSQLiteデータベースについての説明があります。

お役に立てれば。


これは非常に優れたリンクですが、SQLiteデータベースはすべてのMacに表示され、ドライブ上のファイル全体の小さなサブセットであるバージョンを持つドキュメントのみを追跡します。すべてのファイルサイズを格納するデータベースへのリンクを見つけることができる場合、ファイルシステムは既にこれを行うデータベースであるため、控えめに言っても興味深いでしょう。
bmike
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.