CGPDFDocument Threading - PullRequest
       7

CGPDFDocument Threading

1 голос
/ 20 ноября 2011

Apple Документация упоминает, что обработка потоков в рендеринге кварцевого ядра PDF должна выполняться вручную.Кто-нибудь реализовал многоядерный рендеринг PDF или есть идеи, как можно разгрузить рендеринг на отдельные потоки или разделить документ на куски страниц и распределить его по отдельным ядрам, как предполагает документация?В настоящее время мое приложение загружает большие PDF-файлы за 1,5 секунды, но многопоточность может значительно сократить это время (ха-ха).

1 Ответ

3 голосов
/ 21 ноября 2011

Как вы заметили, в документации явно сказано: «Распределение отдельных страниц документа PDF по отдельным потокам не поддерживается. Если вы хотите использовать потоки, рассмотрите возможность создания отдельного документа для каждого потока и работы с блоком страниц в потоке».«.Хотя, чтобы адаптировать это руководство к GCD, вместо этого вы должны создать последовательную очередь для каждого «блока страниц» (где размер блока, конечно, может быть «одной страницей»), а затем создать и управлять отдельным CGPDFDocumentRef, отправляяблоки в соответствующие очереди.Защитите свои структуры данных, также заставив ваш метод получения для заданного CGPDFDocumentRef использовать ту же очередь с dispatch_sync для получения значения, и тогда это просто вопрос подключения интерфейса пользователя для отображения любой данной страницы вашего документа (или всего документа).), проходя через отдельные фрагменты так, чтобы они по-прежнему представляли собой один большой документ для всего остального кода.

...