0

行ごとに処理して結果を追加する巨大なテキストファイルがあるStringBuilderので、1行のテキストをロードするメインフォームを保持しません。

処理が完了したら、結果をにダンプしrichtext textboxます。私が持っているキーワードに基づいてテキストのいくつかを強調したいと思います。文字列を使用することになります。各単語のすべてのテキストを見つけて強調表示します。ラムダ式richbox.BeginInvokeを使用してテキストを強調表示するスレッドを作成してみました。スレッドは正常に機能しますが、リッチテキストボックスを処理するため、非常に低速です。

richtext box1行ずつループして、50〜100 MBのテキストを考慮して、理解できるパフォーマンスでその単語を強調表示するにはどうすればよいですか。

この質問は、プログラミングに関連しているため、スーパーユーザーから移動されました。http://www.dotnetcurry.com/ShowArticle.aspx?ID=146http://www.codeproject.com/Articles/4031/Background-Highlighting-with-the-RichTextBox-などの解決策が提案されてい ます。 -S ですが、大きなテキストにはまだ非効率的です。

foreach (string x in LArgs)
{
    int len =0;
    int index = 0;
    int lastIndex=0;
    output.Invoke(() => { len=output.Text.Length; });
    output.Invoke(() => { lastIndex=output.Text.LastIndexOf(x); });
    while (index < lastIndex)
    {
        output.Invoke(() => { output.Find(x, index, len, RichTextBoxFinds.None); });
        output.Invoke(() => { this.output.SelectionBackColor = Color.Yellow; });
        output.Invoke(() => { index = this.output.Text.IndexOf(x, index) + 1; });
    }
}

ライブラリを追加して、次のコードを使用しました。

scintilla1.Text = output.Text;

StringBuilder conf = new StringBuilder();
conf.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
conf.AppendLine(@"<ScintillaNET>");
conf.AppendLine("<Language Name=\"log\">");
conf.AppendLine("<lexer LexerName=\"log\">");
conf.AppendLine("<Keywords List=\"0\">");

foreach (string x in LArgs)
{
    conf.Append(x + " ");
}
//var
conf.AppendLine("</Keywords>");
conf.AppendLine(@"</lexer >");
conf.AppendLine(@"<Styles>");

conf.AppendLine(@"</Language>");
conf.AppendLine(@"</ScintillaNET>");

File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory+@"ScintillaNET.xml", conf.ToString());
scintilla1.Lexing.LexerLanguageMap["log"] = "cpp";
scintilla1.ConfigurationManager.CustomLocation = AppDomain.CurrentDomain.BaseDirectory + @"ScintillaNET.xml";
scintilla1.ConfigurationManager.Language = "log";
scintilla1.ConfigurationManager.Configure();

テキストは読み込まれますが、テキストや後で追加するテキストが強調表示されません

4

1 に答える 1

1

externライブラリを使用できますか?

では、 Scintilla.Netについてはどうでしょうか。

これは、Scintilla(SciTE、Notepad ++)に基づく非常に優れた高速ハイライトコントロールです。

于 2013-01-28T16:20:21.083 に答える