syntax highlighting zu langsam

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    syntax highlighting zu langsam

    Guten Tag, ich habe ein Problem ich habe eine "vollständige" Script-Sprache programmiert. Diese auch voll funktionfähig ist. Natürlich braucht man auch gewisse Farbe bei gewissen Schlagwörtern im Code. Sonst würde man schnell den Überblick verlieren. Bisher meister ich das mit diesem Code:

    VB.NET-Quellcode

    1. Private Sub blue(ByVal Wort As String)
    2. Dim Index As Integer = code1.Text.IndexOf(Wort)
    3. Do Until Index = -1
    4. code1.SelectionStart = Index
    5. code1.SelectionLength = Wort.Length
    6. code1.SelectionColor = Color.blue
    7. Index = code1.Text.IndexOf(Wort, Index + 1)
    8. Loop
    9. code1.SelectionStart = code1.Text.Length
    10. code1.SelectionColor = Color.Black

    Und in ein dem TextChanged-Event einer RichTextBox kommt dieser Code rein:

    VB.NET-Quellcode

    1. blue("<")
    2. blue(">") uws.

    Das dauert mir aber viel zu lange, (wenn der Code länger ist). Ich habe da schon was mit dem Control: "Fireball" osä. rumprobiert, aber VB spuckte mit viele Fehler aus. Wen Ihr eine Lösung bzw. Tipps für mich habt, würde ich mich sehr freuen,
    liebe Grüße, ES-Script
    Deine Herangehensweise ist wohl etwas uneffektiv.
    Wenn Du Deinen Quellgtext durchgehst, suchst Du den Anfang jeden Wortes einzeln.
    Dabei fallen die Informationen Position und Länge an. Mit dieser Information gehst Du in Deine Routine und musst nur noch einmal in einmal in Deine Tabelle greifen und kannst sofort die Farbe setzen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    ES-Script schrieb:

    ch habe eine "vollständige" Script-Sprache programmiert. Diese auch voll funktionfähig ist.

    Ist es denn notwenig für Dich einen eigenen Editor für Deine Script-Sprache zu entwickeln ? Schliesslich sind Interpreter/Parser / Syntax-Editor 3 verschiedene Komponenten, und Du könntest ggf einen schon vorhandenen Editor (Notepad++,Textpad, Scite) mit einem eigenen Plugin verwenden ?

    Falls Du doch ein .NET Control dafür brauchst, so gibt es z.B. Scintilla.NET, ein Wrapper um Scintilla, welches Basis von Scite ist.

    Falls Du dennoch auf der Richtextbox bleiben willst , so wirst Du auf jeden Fall bei der Performance Abstriche machen müssen: die RTB ist ein langsames Control. Ab einer gewissen Länge eines Textes werden die Wartezeiten erheblich.

    Ein paar Tips & Tricks:
    - Regex statt String-Methoden: versatiler, aber vermutlich kein Performance-Vorteil
    - nur Prüfung + Formatierung des geänderten Codes
    - Auslagern des Highlightings in Background-Thread : blockt nicht GUI
    - Verwendung von SuspendLayout / ResumeLayout
    Ok ich dachte mir, das ich mit GDI+ ein neues Control zeichne. Dies ging aber total daneben(formatierung). Kennt jemand ein gutes Control dafür. Bitte nich das Fireball-Control damit komme ich nicht klar. Danke

    liebe Grüße, ES-Script
    Probier mal den Avalon Editor

    Wenn Du Forms verwendest musst Du einen WPF Element Host auf die Form ziehen, um den Editor einfügen zu können.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils