Tôi đã làm việc với một cố vấn kỹ thuật cao cấp tại Apple về vấn đề này trong hơn một năm và đã làm việc với một cố vấn cấp cao khác trong một thời gian trước đó. Chúng tôi đã thực hiện "thu thập dữ liệu" để gửi cho Kỹ sư Apple trong một số trường hợp và thực hiện ghi lại màn hình trong nhiều lần để chứng minh những gì đang diễn ra trong Trình giám sát hoạt động, Chụp ảnh và cuối cùng, trong một trường hợp mà icdd duy trì tại / Users / user_name / Thư viện / Hỗ trợ ứng dụng / icdd / deviceInfoCache.plist (bằng cách hiển thị nó trong Xcode).
Tại thời điểm này, đây là ước tính tốt nhất của tôi về những gì đang xảy ra:
Quá trình icdd (Cơ sở dữ liệu thiết bị chụp ảnh) thấy các máy quét đến và đi trên một mạng bận rộn. Nó cố gắng giữ một danh sách các tệp biểu tượng của chúng trong một bảng băm, nó cũng ghi vào tệp deviceInfoCache.plist được đề cập ở trên. Có - điều này nghe có vẻ điên rồ - nó đang giữ các tham chiếu đến các tệp biểu tượng của máy quét. Nhưng thậm chí điên rồ hơn là, vì một số lý do, gần như tất cả các mục trong tệp này đều trỏ đến các tệp .icns không tồn tại. Trong một số hệ thống tôi đã xem, đã có hàng ngàn mục trong tệp, nhưng chỉ có một vài tệp .icns tồn tại trên một trong các máy và không có mục nào tồn tại trên các máy khác. Tôi tin rằng khi tệp này lớn, icdd sẽ mất rất nhiều thời gian để cố gắng kiểm tra sự tồn tại của các mục trong tệp .plist và sửa đổi tệp. Tôi tin điều này vì hai lý do. Đầu tiên, khi tôi mang laptop về nhà, quá trình icdd đôi khi tiếp tục chạy ở khoảng 100% CPU, nhưng khi tôi giết nó, nó sẽ quay trở lại mức "bình thường" khoảng 0,0 đến 0,1% mỗi lần. Do đó, tôi nghĩ rằng đôi khi vẫn cố gắng xử lý thông tin về các mục khi tôi mở nó ở nhà. Nhưng khi tôi giết nó trong khi trên mạng bận rộn, nó thường quay lại gần 100% ngay lập tức. Khi số lượng máy quét hiển thị trong Image Capture giảm xuống (điều này thường làm, nhưng sẽ tăng đột biến theo định kỳ vì một số lý do), icdd cuối cùng sẽ ổn định. Và thứ hai, xóa tệp deviceInfoCache.plist khiến icdd hoạt động hợp lý trong một thời gian ngắn - cho đến khi số lượng mục nhập được xây dựng lại. Lưu ý rằng icdd duy trì một bản sao của các mục này trong bộ nhớ, vì vậy nếu bạn xóa tệp khỏi tài khoản người dùng, icdd chỉ cần viết lại nó ngay lập tức. Và tất nhiên, bạn không thể giết icdd đủ lâu để xóa tệp, vì vậy bạn phải đăng xuất và xóa tệp khỏi tài khoản quản trị viên khác qua thiết bị đầu cuối. icdd sẽ tạo lại tập tin khi bạn đăng nhập lại, nhưng nó sẽ có tương đối ít mục và hoạt động tốt trong một thời gian.
Để đưa ra một số ý tưởng về quy mô, Apple Engineers đã bị sốc khi thấy rằng tôi có tới 85 máy quét hiển thị trong Image Capture. Tuy nhiên, thường thì con số này sẽ ổn định xuống còn khoảng 6 trên cùng một hệ thống và trong cùng một khung thời gian. Tệp deviceInfoCache.plist đã có từ 8.000 đến 12.600 mục trên các hệ thống mà tôi đã xem có vấn đề về icdd - của tôi là lớn hơn và tôi tin rằng điều này đã được chuyển từ một máy cũ hơn vì tôi gặp vấn đề về icdd kể từ thời điểm tôi thiết lập MacBook Pro mới vào năm 2016-tháng 12. Khi tôi xóa tệp plist, số lượng mục nhập ban đầu trong tệp mới được tạo là 44 và trong vài ngày, việc sử dụng cpu icdd đã lơ lửng gần 0,0%. Tuy nhiên, sau khoảng 5 ngày trong khuôn viên trường, tập tin plist của tôi có 964 lượt đăng ký, và việc sử dụng cpu icdd sẽ thường xuyên bị trả lại từ 30% đến 90% trên mạng bận rộn tại trường đại học. Khi tôi ở nhà, tập tin plist sẽ chỉ tăng số lượng mục nhập của nó lên 0 đến 2 trong suốt một ngày. Trong số 12.600 mục trong tệp plist trước đây của tôi, chỉ có 2 trong số chúng chứa "deviceName", phần còn lại chứa "iconPathLocation", tất cả đều trỏ đến các tệp .icns không tồn tại. Với số nguyên hiện tại, vẫn còn chính xác 2 mục chứa "deviceName" và phần còn lại chứa "iconPathLocation" không tồn tại. tất cả đều trỏ đến các tệp .icns không tồn tại. Với số nguyên hiện tại, vẫn còn chính xác 2 mục chứa "deviceName" và phần còn lại chứa "iconPathLocation" không tồn tại. tất cả đều trỏ đến các tệp .icns không tồn tại. Với số nguyên hiện tại, vẫn còn chính xác 2 mục chứa "deviceName" và phần còn lại chứa "iconPathLocation" không tồn tại.
Vì vậy, giải pháp ngắn hạn là xóa tệp plist khỏi tài khoản quản trị viên khác qua thiết bị đầu cuối trong khi đăng xuất khỏi tài khoản người dùng của bạn. Hy vọng rằng, với thông tin này hiện được cung cấp cho Apple Engineers từ Cố vấn cao cấp của tôi, Apple Engineers sẽ có đủ thông tin để tìm hiểu tại sao icdd lại hành động theo cách này và khắc phục vấn đề. Tất nhiên, nó có thể sẽ hữu ích nếu bạn có thể xác minh giải pháp ngắn hạn của tôi và tiếp tục báo cáo những gì bạn tìm thấy cho Apple.