Как оптимизировать код поиска слов и их выделения цветом в RichTextBox - Visual Basic .NET
Формулировка задачи:
Написал код поиска слов и их выделения цветом в RichTextBox:
Функция ColoringAllText получает массив слов, ищет каждое слово по всему тексту и выделяет его цветом, если найдет. Массив содержит всего 300 слов, весь текст весит 50Кб, а программа выделяет слова за ~7 секунд - многовато как-то. Как можно оптимизировать код?
Решение задачи: «Как оптимизировать код поиска слов и их выделения цветом в RichTextBox»
textual
Листинг программы
Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim t As Date = Now Dim words() As String = Split("об,ее,он,она,если,или,почему,что,кто,оно,да,нет,пошел,ушел,зашел,память,гость,страшный,и,метель,каждый,олеся,олесе,ему,ей", ",") For Each word In words For Each st In Pars(RichTextBox1.Text, word, 0) RichTextBox1.Select(st, word.Length) RichTextBox1.SelectionColor = Color.Blue If RichTextBox1.SelectionColor = Color.Gold Then RichTextBox1.SelectionLength = 0 End If Next Next MsgBox(Now.Subtract(t).TotalSeconds) End Sub Function Pars(ByVal strSource As String, ByVal str1 As String, Optional ByRef startPos As Integer = 0) As Object strSource = LCase(strSource) Dim len As Integer = strSource.Length Dim strStart As String = LCase(str1) 'Dim strEnd As String = LCase(str1.ToCharArray.ToArray.Last) Dim iPos As Integer, iEnd As Integer, lenStart As Integer = strStart.Length Dim strResult As New Hashtable iPos = strSource.IndexOf(strStart, startPos) iEnd = iPos + str1.Length Do While iPos <> -1 AndAlso iEnd <= len AndAlso iPos <> iEnd Dim m As String = strSource.Substring(iPos, iEnd - iPos) If LCase(m) = LCase(str1) Then strResult(iPos) = str1 iPos = iEnd iPos = strSource.IndexOf(strStart, iPos) iEnd = iPos + str1.Length Else iPos += 1 iPos = strSource.IndexOf(strStart, iPos) iEnd = iPos + str1.Length End If Loop Return strResult.Keys End Function End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д