Od czasu, gdy na scenie pojawił się Mac OS X, byliśmy w stanie poprosić Findera o obliczenie wszystkich rozmiarów w celu ustalenia całkowitej sumy czytelnej przestrzeni wielkości pliku zawartej w każdym folderze dla danego okna Findera.
Przetestowałem rozmiar folderów w widoku listy na kilku komputerach Mac, gdzie nie ma znaczenia, czy dysk SSD jest obecny, czy nie, ale Lion tak szybko oblicza rozmiary, jestem ciekawy, czy istnieje nowa struktura danych buforowania lub czy Finder używa informacje o metadanych z Spotlight lub podobnej bazy danych, aby znacznie przyspieszyć te obliczenia.
lion
finder
performance
bmike
źródło
źródło
Odpowiedzi:
Nie zauważyłem, że Lion jest szybszy w obliczaniu rozmiarów folderów (i paczek / pakietów) podczas pierwszego obliczania rozmiarów w folderze. Jednak kolejne obliczenia w tym samym folderze wydają się znacznie szybsze.
Częścią postrzeganej szybkości może być to, że Finder natychmiast pokaże wcześniej obliczone rozmiary szarym tekstem, podczas gdy ponownie oblicza rozmiary folderów, zamiast pokazywać „-”, dopóki nie zostanie obliczony. Po ponownym obliczeniu rozmiaru folderu numer zostanie zaktualizowany (jeśli rozmiar się zmienił) i zmieni kolor na czarny.
Ponieważ Finder w sposób zauważalny buforuje wcześniej obliczone rozmiary folderów, możliwe jest, że ponownie oblicza tylko rozmiary folderów, które zmieniły się od czasu ostatniego obliczenia.
źródło
Przed Lionem w kolumnie Rozmiar pliku w Finder.app był wyświetlany rozmiar każdego pliku wymagany na dysku twardym, a nie dokładny rozmiar pliku. Na przykład 1 bajtowe pliki były wyświetlane jako 4 KB, ponieważ w rzeczywistości zajmują 4 KB miejsca w systemie sformatowanym w systemie HFS. Rzeczywisty rozmiar pliku 1 bajt nie był łatwy, inny niż otwarcie Plik ›Uzyskaj informacje (lub użycie innej aplikacji, takiej jak Terminal.app, a następnie użycie
ls -lsa
lub zamiana Finder.app, takiej jak TotalFinder.app ).(Powrót w dzień, zgłosiłem to jako bug 8926275 na bugreport.apple.com ).
Począwszy od Lion, to zachowanie zostało poprawione, a kolumna Rozmiar pliku pokaże teraz dokładny rozmiar każdego pliku, a nie rozmiar przydzielany na dysku twardym (który i tak zależy od systemu plików).
Ponieważ te rozmiary to te same liczby, które można uzyskać z
ls
pliku binarnego w terminalu, ich obliczenia są znacznie wydajniejsze.źródło
stat(2)
połączenie nie jest odpowiedzialne za odzyskanie obu numerów? I wls(1)
ogóle nie pokazuje rzeczywistego rozmiaru pakietów / pakietów / folderów, więc nie mam pojęcia, dlaczego to jest istotne.ls
pokazuje rozmiary plików w porządku dla zwykłych plików.stat
można zrobić to samo dla pojedynczego pliku. Chodzi mi o to, że „dodatkowa praca” potrzebna do obliczenia rozmiarów pakietów / pakietów / folderów jest teraz potrzebna tylko dla pakietów / pakietów / folderów, a nie dla zwykłych plików.ls
pokazuje rozmiary plików dla zwykłych plików, a nie pakietów (tak powiedziałem). Robi to dzwoniącstat
. Jaka „dodatkowa praca” była wcześniej wymagana w przypadku zwykłych plików? Pojedynczestat
wywołanie zwraca oba bloki (st_blocks
) i bajty (st_size
).Nie zdziwiłbym się, gdyby używali metadanych Spotlight do buforowania rozmiarów plików. Jeśli już używasz FSEventów do śledzenia wszystkich zmian w systemie plików i (potencjalnie) Time Machine, aby wykonać kopię zapasową wszystkich tych zmian, dodatkowy koszt obliczania i przechowywania zbiorczych rozmiarów plików jest znikomy.
źródło
Począwszy od OS X Lion, Apple dodał bazę danych SQLite, której system operacyjny używa do śledzenia plików w funkcjach systemu, takich jak Spotlight. Kwerendowanie z bazy danych SQLite zamiast sprawdzania systemu plików za każdym razem jest bardziej niż prawdopodobne przyczyną poprawy wydajności. Recenzja Johna Siracusa na OS X Lion szczegółowo wyjaśnia zmiany w systemie plików w Lionie. W szczególności tutaj znajdziesz wyjaśnienie dotyczące nowej bazy danych SQLite.
Mam nadzieję że to pomoże.
źródło