Я работал со старшим техническим консультантом в Apple над этой проблемой более года, а до этого некоторое время работал с другим старшим консультантом. Мы сделали «сбор данных», чтобы отправить его инженерам Apple несколько раз, и несколько раз делали записи экрана, чтобы продемонстрировать, что происходит в Activity Monitor, Image Capture и, в конечном счете, в списке, который icdd поддерживает в / Users / user_name / Library / Application Support / icdd / deviceInfoCache.plist (отображая его в Xcode).
На данный момент, вот моя лучшая оценка того, что происходит:
Процесс icdd (Image Capture Device Database) видит, что сканеры приходят и уходят в загруженной сети. Он пытается сохранить список своих файлов значков в хеш-таблице, которую он также записывает в файл deviceInfoCache.plist, упомянутый выше. Да, это звучит безумно - это ссылки на файлы значков сканеров. Но еще более сумасшедшим является то, что по какой-то причине почти все записи в этом файле указывают на несуществующие файлы .icns. Из нескольких систем, на которые я смотрел, в этом файле было много тысяч записей, но только несколько файлов .icns существовали на одной из машин, и ни одна не существовала на других. Я считаю, что когда этот файл становится большим, icdd тратит много времени, пытаясь проверить наличие записей в файле .plist и изменить файл. Я верю в это по двум причинам. Во-первых, когда я беру свой ноутбук домой, иногда процесс icdd продолжает работать примерно на 100% процессорного времени, но когда я его затем убиваю, он каждый раз возвращается к «нормальному» примерно от 0,0 до 0,1%. Следовательно, я думаю, что иногда я все еще пытаюсь обработать информацию о записях, когда я открываю ее дома. Но когда я убиваю его, находясь в загруженной сети, он часто возвращается почти на 100% сразу. Когда число сканеров, показанных в Захвате изображений, уменьшается (что часто происходит, но по какой-то причине будет периодически расти), icdd в конечном итоге успокоится. И, во-вторых, удаление файла deviceInfoCache.plist приводит к тому, что icdd ведет себя разумно в течение короткого времени - до тех пор, пока количество записей не возрастет снова. Обратите внимание, что icdd хранит копию этих записей в памяти, поэтому, если вы удалите файл из учетной записи пользователя, icdd просто переписывает его немедленно. И, конечно же, вы не можете удалить icdd достаточно долго, чтобы удалить файл, поэтому вам нужно выйти из системы и удалить файл из другой учетной записи администратора через терминал. При повторном входе в icdd файл будет воссоздан, но он будет содержать относительно мало записей и некоторое время будет вести себя хорошо.
Чтобы дать представление о масштабах, инженеры Apple были потрясены, увидев, что у меня было целых 85 сканеров, отображаемых в Image Capture. Однако часто это число устанавливается примерно до 6 в той же системе и в те же периоды времени. Файл deviceInfoCache.plist содержал от 8000 до 12 600 записей в системах, на которые я смотрел, у которых были проблемы с icdd - у меня самая большая, и я считаю, что это перенесено со старой машины, так как у меня были проблемы с icdd с того момента, как я установил свой новый MacBook Pro в 2016-дек. Когда я удалил файл plist, число начальных записей во вновь созданном файле было 44, и в течение нескольких дней использование процессора icdd зависло почти до 0,0%. Тем не менее, после примерно 5 дней в университетском городке, мой plist файл имеет 964 записей, и использование процессора ICDD обычно будет колебаться между 30% и 90% в загруженной сети в университете. Когда я дома, файл plist будет только увеличивать количество записей от 0 до 2 в течение дня. Из 12 600 записей в моем предыдущем файле plist только 2 из них содержат «имя_устройства», остальные содержат «iconPathLocation», все из которых указывают на несуществующие файлы .icns. С текущим списком, все еще есть ровно 2 записи, которые содержат «имя_устройства», а остальные содержат «iconPathLocation», который не существует. все из которых указывают на несуществующие файлы .icns. С текущим списком, все еще есть ровно 2 записи, которые содержат «имя_устройства», а остальные содержат «iconPathLocation», который не существует. все из которых указывают на несуществующие файлы .icns. С текущим списком, все еще есть ровно 2 записи, которые содержат «имя_устройства», а остальные содержат «iconPathLocation», который не существует.
Таким образом, краткосрочное решение состоит в том, чтобы удалить файл plist из другой учетной записи администратора через терминал при выходе из вашей учетной записи пользователя. Надеемся, что теперь эта информация предоставляется инженерам Apple от моего старшего советника, и у инженеров Apple будет достаточно информации, чтобы выяснить, почему icdd действует именно так, и решить проблему. Конечно, было бы полезно, если бы вы могли проверить мое краткосрочное решение и продолжить сообщать о том, что вы нашли в Apple.