Я работаю над небольшим бесплатным приложением Cocoa, которое включает в себя некоторые функции SFTP, в частности, с загрузкой. Приложение близится к завершению, однако я столкнулся с довольно плохой проблемой в отношении загрузки папок, содержащих много файлов.Обработка очень больших загрузок SFTP - Cocoa
Я использую ConnectionKit для обработки загрузки:
CKTransferRecord * record;
record = [connection recursivelyUpload:@"/Users/me/large-folder"
to:@"/remote/directory"];
Это отлично работает для большинства файлов и папок. Хотя в этом случае @ "/ Users/me/large-folder" содержит более 300 файлов. Вызов этого метода запустит мой процессор до 100% в течение примерно 30 секунд, и мое приложение не отвечает (mac spinning ball). Через 30 секунд моя загрузка поставлена в очередь и работает отлично, но это вряд ли идеально. Очевидно, что все, что перечисляет эти файлы, заставляет мое приложение блокироваться, пока оно не будет выполнено.
Не уверен, что с этим делать. Я открыт практически для любого решения - даже с использованием другой структуры, хотя я сделал свое исследование, и ConnectionKit кажется лучшим из того, что там есть.
Любые идеи?
Перемещение перечисления на собственную нить остановило программу от блокировки, однако я все еще работаю на 100% -ном CPU во время. Можете ли вы объяснить, что вы подразумеваете под «ленивым» чтением файлов? – nrj
Это означает, что вы читаете файл как можно позже.В этом случае это означает, что вы не читаете файл, пока не будете готовы его загрузить. Я подозреваю, что они читают все файлы во время перечисления, что, вероятно, не подходящее время для этого. Если это необходимо, NSFileHandle имеет подпрограммы для чтения в фоновом режиме и уведомляет вас, когда это делается для чтения. –