AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Desaströse Performance von TRichedit

Ein Thema von Maekkelrajter · begonnen am 11. Sep 2024 · letzter Beitrag vom 12. Sep 2024
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#5

AW: Desaströse Performance von TRichedit

  Alt 12. Sep 2024, 01:03
Ja, Delphi nutzt aktuell das Richedit 4.1 und davor ewig lang die 2.0.
Kann/wird gut sein, dass sich dabei hier und da bissl was geändert hat.


Erstmal solltet ihr einwas bedenken.
Delphi/Embarcadero pfusch dort bereits extrem pervers an der Komponente rum und verbiegt mehr schlecht als recht die Zeilenumbrüche.
-> SelStart/SelLength stimmen nicht mehr mit den Positionen im Text-String überein ... je Zeile verrutsch es um ein weiteres Zeichen.

Windows arbeitet hier mit #13 (erschreckender Weise) und Delphi bricht das halbherzig/teilweise auf #13#10 um.


Außerdem kapselt TRichEdit die Komponente des Betriebssystems
und da hat Microsoft scheinbar nicht vor zukünftig noch irgendwas groß dran machen zu wollen.

Die Referenzimplementation für TRichEdit (WordPad) soll angeblich abgeschafft werden
und die Referenzimplementation für TMemo (Notepad) wurde auch verunstaltet. (nutzt jetzt anstatt dem Multiline-EDIT des GDI ein 3D-gerendertes RichEditD2D des Direct2D)




Bei RichEdit.Text und RichEdit.Lines.Text/LoadFromFile (ebenfalls beim TMemo) muß man auch unterscheiden, dass .Text direkt via WM_SETTEXT ins Control geht,
während Lines (TStrings) per se Zeilenweise zugreift ... teilweise wird aber im TStrings-Nachfahren doch auf's WM_SETTEXT umgeleitet, anstatt wirklich jede Zeile einzeln (aber nicht bei allen Controls)

Beim Lines.Text wird aus allen Zeilen ein neuer String zusammengebaut (und das nicht wirklich sehr optimal)
beim LoadFromFile wird dazu auch normal erstmal alles als TBytes in den RAM geladen, das dann via TEncoding erstmal in einen String umgewandelt (normal das dann in viele Strings zerlegt und anschließend erneut wieder in "einen" string zusammengesetzt)

Also die Stringlist macht das so,
aber TRichEdit leitet Lines.Text nahezu direkt an EM_STREAMIN weiter (es jagt den Text nur noch sehr oft Stückchenweise durch ein TEncoding)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Sep 2024 um 01:36 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz