Hallo zusammen,
ich habe angefangen ein wenig rumzuprobieren ob ich nen gescheiten Editor hinkriege und probiere mich nun am Syntax Highlighting.
Ich hab nun auch schon ettliche Variationen und bin auch schon um 60% Schneller als Anfangs doch immer noch viel zu langsam.
ich habe eine RichTextbox in der ich text eintippen bzw reinkopieren kann. Nach betätigen von z.B. Enter wird die komplette Textbox nach dem Wort "Auto"(ist in einem String Array gespeichert) gesucht.
Ich speichere mir die Startpos von jedem gefunden Wort in ein Array.
Nun kommt noch eine Schleife die die gefundenen Positionen durchläuft und dann jedes Wort Markiert und mit der Farbe Rot einfärbt.
Klappt eigentlich sehr gut, bis auf nen kleinen Bug, aber eben die Geschwindigkeit. Pfui !
Für 300 Zeilen Text mit ca .12000 zeichen und einigen "Auto"s darin versteckt läuft die Sache gut über 2 Sekunden. Wie krieg ich das schneller hin ?
Hier mal die wichtigen Ausschnitte:
Ich habe jetzt 2 Ideen zur Optimierung:
1) Mehrere Wörter gleichzeitig markieren, nicht hintereinander in ner Schleife wie bisher.
oder
2) Irgendwie die aktualisierung der Textbox aufhalten und erst wenn alle Wörter sozusagen im Hintergrund gefärbt wurden die Anzeige refreshen.
Bei beidem gilt: Wie anstellen?
Hoffe ihr habt ein paar gute Tipps auf Lager.
MfG CodeB
ich habe angefangen ein wenig rumzuprobieren ob ich nen gescheiten Editor hinkriege und probiere mich nun am Syntax Highlighting.
Ich hab nun auch schon ettliche Variationen und bin auch schon um 60% Schneller als Anfangs doch immer noch viel zu langsam.
ich habe eine RichTextbox in der ich text eintippen bzw reinkopieren kann. Nach betätigen von z.B. Enter wird die komplette Textbox nach dem Wort "Auto"(ist in einem String Array gespeichert) gesucht.
Ich speichere mir die Startpos von jedem gefunden Wort in ein Array.
Nun kommt noch eine Schleife die die gefundenen Positionen durchläuft und dann jedes Wort Markiert und mit der Farbe Rot einfärbt.
Klappt eigentlich sehr gut, bis auf nen kleinen Bug, aber eben die Geschwindigkeit. Pfui !
Für 300 Zeilen Text mit ca .12000 zeichen und einigen "Auto"s darin versteckt läuft die Sache gut über 2 Sekunden. Wie krieg ich das schneller hin ?
Hier mal die wichtigen Ausschnitte:
VB.NET-Quellcode
- Private Sub rtxtEingabe_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles rtxtEingabe.KeyDown
- ' Testreihe 3
- Dim AuswahlStr As Integer = 0
- Dim FindPosArray(1000) As Integer
- Dim Nr As Integer = 0
- If e.KeyCode = Keys.Space Or e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Tab Then ' Reagiert auf bestimmte Tasten
- StopWatch.Start()
- Dim CaretMerker As Integer ' Positionsmerker für Caretposition(Position= akt. Zeichen)
- Dim i As Integer ' Schleifenzaehler
- CaretMerker = rtxtEingabe.SelectionStart
- For i = 0 To rtxtEingabe.Text.Length' Positionen der gefunden Wörter speichern
- If rtxtEingabe.Find(SuchStr(AuswahlStr), i, i + SuchStr(AuswahlStr).Length + 1, RichTextBoxFinds.None) >= 0 Then
- FindPosArray(Nr) = i + 1
- i = i + SuchStr(AuswahlStr).Length
- Nr = Nr + 1
- End If
- Next
- For i = 0 To Nr - 1 ' Wörter markieren und färben
- rtxtEingabe.SelectionStart = FindPosArray(i)
- rtxtEingabe.SelectionLength = SuchStr(AuswahlStr).Length
- rtxtEingabe.SelectionColor = Color.Red
- rtxtEingabe.SelectionLength = 0
- rtxtEingabe.SelectionStart = CaretMerker
- StartPos = CaretMerker
- rtxtEingabe.SelectionColor = Color.Black
- Next
- StopWatch.Stop()
- lbl_DEBUG_Stopp.Text = StopWatch.ElapsedMilliseconds.ToString
- StopWatch.Reset()
- End If
Ich habe jetzt 2 Ideen zur Optimierung:
1) Mehrere Wörter gleichzeitig markieren, nicht hintereinander in ner Schleife wie bisher.
oder
2) Irgendwie die aktualisierung der Textbox aufhalten und erst wenn alle Wörter sozusagen im Hintergrund gefärbt wurden die Anzeige refreshen.
Bei beidem gilt: Wie anstellen?
Hoffe ihr habt ein paar gute Tipps auf Lager.
MfG CodeB