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
 
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#1

Desaströse Performance von TRichedit

  Alt 11. Sep 2024, 15:03
Wie es scheint, ist die ohnehin noch nie berauschende Performance des TRichedit-Controls ist seit Delhpi 11 geradezu ins bodenlose gesackt. Bei Tests mit meiner 'Referenz-Funktion' mit der eine relativ große Stringlist (90000 - 174000 Zeilen) in einem Richedit angezeigt wird, zeigte sich eine geradezu groteske Ausführungszeit von bis zu 16(!) sec. (siehe Anhang).
Delphi-Quellcode:
// stopwatch: System.Diagnostics.TStopwatch

Procedure StartStopWatch;
begin
  Stopwatch.Reset;
  Stopwatch.Start;
end;

Function Stoptime:double;
begin
  Stopwatch.stop;
  result:= Stopwatch.ElapsedMilliseconds / MSecsPerSec / SecsPerDay;
end;

procedure TGL4Mainform.XMLContent1Click(Sender: TObject);
  var stop: double;
      SL:TStringlist;
      FN: string;
begin
  FN:= 'filename.txt';
  SL:= TStringlist.Create;
  try
    If GetXMLContent(SL) Then
    begin
      SL.SaveToFile(FN,TEncoding.unicode);
      startstopwatch;
      richedit1.Text:= SL.Text;
      //richedit1.lines.LoadFromFile(fn);
      stop:= stoptime;
      richedit1.setfocus;
      richedit1.Lines.Add(#13#10'Anzeige der Daten im Richedit: ' + timestring(-stop));
      richedit1.Lines.Add(#13#10'Anzahl der Zeilen: ' + richedit1.Lines.Count.ToString);
    end;
  finally
    SL.Free;
  end;
end;
Mit einer mit Delphi 10.4.2 compilierten Version meines Programms dauert das ganze weniger als 2 Sekunden. Auf einem weniger betagten Rechner dürfte natürlich alles noch deutlich schneller gehen, aber bemerkenswert ist vor allem das Verhältnis. Das 'neue' TRichedit-Steuerelement ist demnach bis zu 8mal langsamer als das alte, und das gerade bei der kleineren XML. Die stammt allerdings von einem Mac und enthält z.T. alternative, aber gültige utf-8 Codierungen.
Wenn ich anstelle des TRichedit ein TMemo verwende, dauert derselbe Vorgang übrigens weniger als 100 ms (s. Anhang).
Delphi-Quellcode:
procedure TGL4Mainform.XMLContent2Click(Sender: TObject);
  var stop: double;
      SL:TStringlist;
      FN: string;
  const mask = 'content';
begin
  setmaincursor(crHourGlass);
  FN:= 'filename.txt';
  SL:= TStringlist.Create;
  try
    If GetXMLContent(SL) Then
    begin
      SL.SaveToFile(FN,TEncoding.unicode);
      startstopwatch;
      memo1.Text:= SL.Text;
      stop:= stoptime;
      memo1.setfocus;
      Memo1.Lines.Add(#13#10'Anzeige der Daten im Memo: ' + timestring(-stop));
      Memo1.Lines.Add(#13#10'Anzahl der Zeilen: ' + memo1.Lines.Count.ToString);
    end;
    SetMainCursor(crDefault);
  finally
    SL.Free;
  end;
end;
Aber einige optische Gimmicks wie mehrfarbiger Text sind eben mit einem TMemo nicht zu realisieren. Auch TListbox fällt als Alternative aus, da es mit so großen Listen offenbar nicht umgehen kann.
Als Workaround hatte ich die Stringlist in einer Datei zwischengespeichert und anschließend in das Richedit geladen. Das dauert zwar nur gut 2 sec, aber leider werden dann nicht alle Sonderzeichen korrekt dargestellt. Eine Speicherung als utf-8 (TEncoding.UTF8) schlägt fehl ('Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden'), und bei Speicherung als 'Unicode' (TEncoding.Unicode) dauert der Ladevorgang ebenfalls >15 sec, dafür ist das Ergebnis wenigstens korrekt.
Also eine absolut unbefiedigende Situation. Oder gibt's noch irgendeine Stellschraube bei TRichedit, die ich bisher übersehen habe? Oder einen brauchbaren Workaround?

Gruß LP
Angehängte Grafiken
Dateityp: jpg Memo-Export.jpg (130,3 KB, 32x aufgerufen)
Dateityp: jpg RicheditExport.jpg (107,0 KB, 27x aufgerufen)
  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 10:19 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