我目前正在从事语法高亮和代码完成项目,并基于 RichTextBox 进行用户控制。我在适应 RTB 的工作方式和一切方面遇到了一些问题,但我设法进行了简单的语法突出显示。
简单意味着每次用户键入字符时我都会突出显示整个文本。它不应该很快或任何东西,但它太慢了。当我有大约 500 个字符的文本时,性能问题变得明显,并且我只对每个键入的字符进行一次传递(一次传递中调用了大约 100 次“colorInterval”函数)。
性能分析表明问题是 TextRange 构造函数需要大约 80% 以上的时间,并且我每次需要为文本间隔着色时都使用它:
private void colorInterval(TextPointer start, TextPointer end)
{
TextRange range = new TextRange(start, end);
if(isFunction(range.Text)) colorAsFunction(range);
if(isInQuotes(range.Text)) colorAsQuoted(range);
...
}
所以这是我的问题:
我这样做是不是做错了什么,或者有没有办法提高 TextRange 的性能,回收“范围”对象或类似的东西?还有什么其他解决方案。