多线程文本处理的成本/收益

时间:2009-05-03 06:33:43

标签: c objective-c multithreading

我正在为iPhone制作一个实时语法荧光笔,我创建了一个自定义UIView,它接受一个字符串,解析它,然后在其drawRect:方法中突出显示它。我还实现了一个闪烁的光标。然而,它开始变得有点慢,我认为当我实现多行处理和块处理时,它会减慢它的速度。但是,我尝试将[formattedTextView setNeedsDisplayInRect:]调用放在我的视图控制器中的函数中,然后使用[self performSelectorInBackground:@selector(updateDisplay) withObject:nil]调用单独的线程。键盘现在响应速度更快,但这似乎是在单核处理器上使用线程很糟糕。

做这样的事情有什么问题吗?

由于

2 个答案:

答案 0 :(得分:1)

正如您自己指出的那样,在单处理器上,多线程不会带来巨大的性能提升,但会带来稳定性和复杂性的惩罚。

动态语法着色是一个难题,充满了可能性以进行优化:

  • 您是否在整篇文章中应用了一堆Regex? (不好)或者你解析要保存在像ast这样有效的数据结构中的文本?
  • 您是否将彩色绘画限制在可见区域?

答案 1 :(得分:0)

  

我正在研究实时语法荧光笔

您是在进行关键字突出显示还是编写了BNF解析器?

对于后者,为什么不让它在一个线程中运行; GUI只显示到目前为止已解码的所有颜色。这样你就可以获得即时更新但延迟着色。