2013-05-23 4 views
3

У меня есть приложение с контролем RichTextBox, где процедура добавления текста почти все время:Самый быстрый способ добавить текст в richtextbox?

RichTextBox1.Text += vbNewLine & "Title: " & AlbumName 
RichTextBox1.Text += vbNewLine & "Genre: " & AlbumGenre 
RichTextBox1.Text += vbNewLine & "Year : " & AlbumYear 
RichTextBox1.Text += vbNewLine & "Url : " & AlbumLink 

' The slow thing I think is here: 
RichTextBox1.SelectionStart = RichTextBox1.Text.Length 

RichTextBox1.ScrollToCaret 

Проблема заключается в том, когда RichTextBox имеет больше, чем 50 строк, когда имеет больше линий, то получается более медленно добавьте новый текст (очевидно).

Мне нужно найти лучший способ ускорить процесс, чтобы потерять хотя бы незначительную скорость, когда количество строк richtextbox достигает 1.000 (например).

Причина этого вопроса в том, что я хочу делать все правильно, мне не нравится, когда мое приложение работает медленно, когда у моего richtextbox много строк.

Пожалуйста, мне нужна информация, идеи и/или примеры (независимо от того, в C# или VBNET). Thankyou.

+0

Просто небольшой совет с комментариями кода VB.Net. У меня лично есть апостроф в конце комментария. Это не имеет особого значения в коде (кроме того, что он выглядит немного чище), но он не позволяет текстовым полям на веб-страницах думать, что это просто строка (это то, что ваш ответ сделал). Это немного нерешительно, но он выглядит намного лучше, и ваш код будет правильно окрашен. –

+0

Если вы хотите добавить текст в конец, подумайте об использовании RichTextBox.AppendText. –

ответ

5

Используйте StringBuilder и назначьте текст за один раз.

Если вы не перепишем контроль RichTextBox Я не думаю, что вы будете в состоянии ускорить эту функцию:

' The slow thing I think is here: 
RichTextBox1.SelectionStart = RichTextBox1.Text.Length 

Для лучшей скорости рассмотреть эти альтернативы:

Fast-Colored-TextBox-for-syntax-highlighting

ScintillaNET

Icsharpcode TextEditor


Вот как вы делаете скроллинг до конца с Fast-Colored-TextBox-for-syntax-highlighting:

Editor.ScrollLeft(); 
Editor.Navigate(Editor.Lines.Count - 1); 

Вот как вы делаете скроллинг до конца с Scintella.Net: Vertical scroll Scintilla Textbox during Text Changed event Отказ от ответственности: Я не работаю для любого этих компаний.

Update:

StringBuilder sb = new StringBuilder(); 
sb.AppendLine("Title: "); 
sb.Append(AlbumName); 
sb.AppendLine("Genre: "); 
sb.Append(AlbumGenre); 
sb.AppendLine("Year : "); 
sb.Append(AlbumYear); 
sb.AppendLine("Url : "); 
sb.Append(AlbumLink); 
RichTextBox1.Text = sb.ToString(); 
+0

Можете ли вы добавить в свой ответ пример StringBuilder, взяв по ссылке мои строки кода кода? Как это будет использовать stringbuilder? Я напрямую заменяю текст richtextbox текстом stringbuilder или ... как? – ElektroStudios

+0

@ElektroHacker см. Мое обновление :) –

+0

Спасибо, у меня нет времени, я попробую все ответы позже и «быстро окрашиваются» и приму ответ, спасибо еще раз. – ElektroStudios

2

StringBuilder класс был создан для скорости. Попробуйте это и посмотрите, ускорит ли ваш процесс.

+1

Можете ли вы добавить в свой ответ пример StringBuilder, взяв по ссылке мои строки кода кода? Как это будет использовать stringbuilder? Я напрямую заменяю текст richtextbox текстом stringbuilder или ... как? – ElektroStudios

+0

спасибо за ваш ответ – ElektroStudios

2

Если предложенный вами вариант не подходит для вас, вы можете попробовать следующее. Он находится на C#, но я уверен, что вы можете преобразовать его для VB.

StringBuilder text = new StringBuilder(RichTextBox1.Text); 
    text.AppendFormat("{0}Title: {1}", Environment.NewLine, AlbumName); 
    text.AppendFormat("{0}Genre: {1}", Environment.NewLine, AlbumGenre); 
    text.AppendFormat("{0}Year: {1}", Environment.NewLine, AlbumYear); 
    text.AppendFormat("{0}Url: {1}", Environment.NewLine, AlbumLink); 

    RichTextBox1.Text = text.ToString(); 
    RichTextBox1.SelectionStart = RichTextBox1.Text.Length; 
    RichTextBox1.ScrollToCaret; 
+0

спасибо за ваш ответ – ElektroStudios

8

Это старое сообщение, но я хотел помочь будущим поколениям!

У меня возникла проблема - и, наконец, нашел решение ... Прежде всего, если вам не нужно дополнительное форматирование, используйте TextBox вместо этого (из моих исследований он быстрее и автоматически прокручивается до конец).

Если вам нужно форматировать отдельные строки текста, RichTextBox - это путь, но СДЕЛАЙТЕ, что вы поворачиваете .HideSelection до false (по умолчанию это правда). Это приведет к RichTextBox прокручивать до конца, так что вам не нужно .ScrollToCaret

Вот что я использую после того, как я установил все значения свойств для богатого текстового поля:

private void appendOutput(String msg){ 
    richTextBoxOutput.AppendText(msg + "\r\n"); 
} 


private void appendError(String msg, bool clearPrior){ 
    if (clearPrior){ 
     richTextBoxOutput.Clear(); 
    } 

    richTextBoxOutput.SelectionColor = Color.Red; 
    richTextBoxOutput.SelectedText = msg + "\r\n"; 
} 

UPDATE

Чтобы быть более понятным, установка .HideSelection на false и избежание .ScrollToCaret значительно улучшило скорость моей программы.

Смежные вопросы