RichTextBoxを使用して、単純な構文を強調表示するエディターを作成しています。それ自体を強調表示するプロセスは、次の関数を使用して実装されます。
TextRange documentRange = new TextRange(rtb.Document.ContentStart, rtb.Document.ContentEnd);
documentRange.ClearAllProperties();
.......
tags.Sort((i, j) => i.Level > j.Level ? 1 : i.Level == j.Level ? 0 : -1);
Color []_colors=new Color[]{Colors.Blue,Colors.Brown,Colors.BlueViolet,Colors.Crimson,Colors.DarkBlue,
Colors.Green,Colors.DimGray,Colors.DarkGray,Colors.Maroon,Colors.Navy,Colors.Red};
foreach (var tag in tags)
{
TextRange range = new TextRange(tag.StartPosition, tag.EndPosition);
range.ApplyPropertyValue(TextElement.ForegroundProperty, new SolidColorBrush(_colors[tag.Level%_colors.Length]));
range.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
}
問題は、このアプローチを使用する場合、テキストに多くのキーワードがあると、アプリケーションのパフォーマンスが大幅に低下することです。特に、RichTextBoxeのテキストが変更されるたびにこれを実行します。
プロファイラーを実行しましたが、アプリケーションがプロセッサ時間の半分をdocumentRange.ClearAllProperties()に費やしているようです。
アプリケーションの永続性を向上させるために何を変更する必要がありますか?
WPF RichTextBoxを使用した高速シンタックスハイライトの良い例を誰かが提供できますか?