私は現在、構文の強調表示とコード補完プロジェクトに取り組んでおり、RichTextBox に基づくユーザー コントロールを作成しています。RTB の動作方法やすべてに適応するのにいくつか問題がありましたが、単純な構文の強調表示を行うことができました。
シンプルとは、ユーザーが文字を入力するたびにテキスト全体を強調表示することを意味します。速すぎてはいけませんが、遅すぎます。約 500 文字相当のテキストがあり、入力した文字ごとにテキストを 1 回だけ通過させると、パフォーマンスの問題が明らかになります (「colorInterval」関数は 1 回のパスで約 100 回呼び出されます)。
パフォーマンス分析によると、問題は約 80% 以上の時間を要する TextRange コンストラクターであり、テキストの間隔に色を付ける必要があるたびに使用します。
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 のパフォーマンスを向上させたり、「範囲」オブジェクトをリサイクルしたりする方法はありますか? 他にどのような解決策がありますか。