Стоимость / выгода многопоточной обработки текста - PullRequest
0 голосов
/ 03 мая 2009

Я работаю над подсветкой синтаксиса в реальном времени для iPhone, и я создал собственный UIView, который берет строку, анализирует ее, а затем выделяет ее в своем методе drawRect :. Я также реализовал мигающий курсор. Тем не менее, он начинает работать немного медленнее, и я думаю, что, когда я реализую многострочную обработку и обработку фрагментов, это замедлит ее еще больше. Однако я попытался поместить вызов [formattedTextView setNeedsDisplayInRect:] в функцию в моем контроллере представления, а затем вызвать отдельный поток, используя [self performSelectorInBackground:@selector(updateDisplay) withObject:nil]. Клавиатура теперь более отзывчива, но это кажется плохим использованием потоков на одноядерном процессоре.

Есть ли проблемы с выполнением чего-либо подобного?

Спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2009

Как вы сами отметили, многопоточность на одном процессоре не принесет огромного прироста производительности, но приведет к снижению стабильности и сложности.

Синтаксическая раскраска «на лету» - сложная проблема, наполненная возможностями для оптимизации:

  • Вы применяете кучу регулярных выражений ко всему тексту? (плохо) или вы анализируете текст, который будет содержаться в эффективной структуре данных, такой как ast?
  • Вы ограничиваете раскрашенную картину видимой областью?
0 голосов
/ 03 мая 2009

Я работаю над подсветкой синтаксиса в реальном времени

Вы делаете подсвечивание ключевых слов или вы написали BNF-парсер?

Что касается последнего, почему бы не запустить его в потоке; GUI просто отображает окраску всего, что было декодировано до сих пор. Таким образом, вы получаете мгновенное обновление, но отложенную окраску.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...