С тех пор, как Mac OS X появилась на сцене, мы смогли попросить Finder рассчитать все размеры , чтобы определить общую сумму читаемого пространства размера файла, содержащегося в каждой папке для рассматриваемого окна Finder.
Я протестировал размер представления списка в папках на нескольких компьютерах Mac, где не имеет значения, присутствует ли SSD или нет, но Lion очень быстро вычисляет размеры. Мне интересно, есть ли какая-то новая структура данных кэширования или Finder использует информация метаданных из Spotlight или аналогичной базы данных, чтобы ускорить этот расчет.
lion
finder
performance
bmike
источник
источник
Ответы:
Я не заметил, чтобы Lion быстрее вычислял размеры папок (и package / bundle) в первый раз, когда он вычисляет размеры в папке. Тем не менее, последующие вычисления в той же папке, кажется, гораздо быстрее.
Частично воспринимаемая быстрота может заключаться в том, что Finder немедленно покажет ранее рассчитанные размеры в сером тексте, пока он пересчитывает размеры папок, вместо того, чтобы показывать «-», пока он не будет рассчитан. После пересчета размера папки номер обновится (если размер изменился) и станет черным.
Поскольку Finder заметно кэширует ранее рассчитанные размеры папок, возможно, он только пересчитывает размеры папок, которые изменились с момента последнего вычисления.
источник
До Lion в столбце «Размер файла» в Finder.app отображался размер, необходимый каждому файлу на жестком диске, а не точный размер файла. Например, файлы размером 1 байт отображались как 4 КБ, поскольку на самом деле они занимают 4 КБ пространства в системе, отформатированной в HFS. Не было простого способа увидеть фактический размер файла в 1 байт, кроме открытия «Файл» ›« Информация »(или использования другого приложения, например Terminal.app, а затем использования
ls -lsa
, или замены Finder.app, например TotalFinder.app ).(Назад в день, я сообщил об этом , как ошибка 8926275 на bugreport.apple.com .)
Начиная с Lion, это поведение было исправлено, и в столбце «Размер файла» теперь будет отображаться точный размер файла для каждого файла, а не размер, который он выделяет на жестком диске (который в любом случае зависит от файловой системы).
Поскольку эти размеры совпадают с числами, которые вы получаете из
ls
двоичного файла в терминале, их гораздо эффективнее рассчитать.источник
stat(2)
звонок не отвечает за получение обоих номеров? Иls(1)
вообще не показывает фактический размер пачек / пакетов / папок, поэтому я понятия не имею, почему это актуально.ls
показывает размеры файлов просто отлично для обычных файлов.stat
может сделать то же самое для одного файла. Я хочу сказать, что «дополнительная работа», необходимая для расчета размеров пакетов / пакетов / папок, теперь необходима только для пакетов / пакетов / папок, а не для обычных файлов.ls
показывает размеры файлов для обычных файлов, а не для пакетов (это то, что я сказал). Это делается по телефонуstat
. Какая «дополнительная работа» требовалась для обычных файлов ранее? Одинstat
вызов возвращает оба блока (st_blocks
) и байты (st_size
).Я не удивлюсь, если они используют метаданные Spotlight для кэширования размеров файлов. Если вы уже используете FSEvents для отслеживания всех изменений в файловой системе и (потенциально) Time Machine для резервного копирования всех этих изменений, дополнительные затраты на вычисление и хранение совокупных размеров файлов незначительны.
источник
Начиная с OS X Lion, Apple добавила базу данных SQLite, которую ОС использует для отслеживания файлов в системных функциях, таких как Spotlight. Запросы из базы данных SQLite, а не проверка файловой системы каждый раз, скорее всего, являются причиной повышения производительности. Обзор OS X Lion Джона Сиракузы подробно объясняет изменения файловой системы в Lion. В частности, здесь вы найдете объяснение новой базы данных SQLite.
Надеюсь это поможет.
источник