Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   WideString vs String in Delphi 11.3 (https://www.delphipraxis.net/213641-widestring-vs-string-delphi-11-3-a.html)

backdraft 31. Aug 2023 21:27

WideString vs String in Delphi 11.3
 
Hallo,

ich habe ein Performance Problem mit einer 3rd Party Komponente.
Hier wird eine TObjectList genommen um die Objekte zu halten.

Die Objektklasse hat eine Eigenschaft Value die als WideString definiert ist.

Mein Testszenario ließt eine Textdatei ein und zerlegt die Daten in die einzelnen Worte, die in der Liste gespeichert werden, es sind ca. 2 Mio Werte.

Ein Clear auf die Liste dauert ewig (über 30 Sekunden).
Ebenso ist es langsam, wenn ich durch die Liste gehe und überall den Wert auf '' setze.
Danach ist der Clear auch dann sofort fertig.

Ändere ich Value auf den Typ string sind alle Probleme weg.

Die Komponente unterstützt noch Delphi-Versionen vor XE2, deswegen scheint es alles als WideString definiert zu sein.

Ich dachte eigentlich WideString und String sind seit XE2 gleich.
Gibt es ggf. den Compilterschalter, der dieses Verhalten verursacht?
Oder ist das normal?

Oliver

jaenicke 31. Aug 2023 21:39

AW: WideString vs String in Delphi 11.3
 
WideString wird benötigt, wenn du Strings über DLL-Grenzen hinweg austauschen möchtest oder nicht-unicode Delphiversionen (Delphi 2007 und früher) unterstützen möchtest. Dahinter verbirgt sich der COM-basierte Typ BSTR. Deshalb ist WideString auch deutlich langsamer als ein einfacher String / UnicodeString, den Delphi selbst verwaltet.

Sinnvoll ist aber, wenn es nur um die Unterstützung alter Delphiversionen geht, den Typ per IFDEF als WideString oder string zu definieren, je nach Version...

backdraft 31. Aug 2023 21:56

AW: WideString vs String in Delphi 11.3
 
Zitat:

Zitat von jaenicke (Beitrag 1526339)
WideString wird benötigt, wenn du Strings über DLL-Grenzen hinweg austauschen möchtest oder nicht-unicode Delphiversionen (Delphi 2007 und früher) unterstützen möchtest. Dahinter verbirgt sich der COM-basierte Typ BSTR. Deshalb ist WideString auch deutlich langsamer als ein einfacher String / UnicodeString, den Delphi selbst verwaltet.

Sinnvoll ist aber, wenn es nur um die Unterstützung alter Delphiversionen geht, den Typ per IFDEF als WideString oder string zu definieren, je nach Version...

Ja, das erklärt das Problem.
Ich kenne auch nur die Lösung, dass man mit IFDEF arbeitet, bin aber auch immer davon ausgegangen, dass es egal ist, ob ich WideString oder string schreibe.

Es geht um den ActiveQueryBuilder als 3rdParty Komponente, dann schreibe ich den Author mal an, warum die das heutzutage noch so machen.
Irgendwann muss man auch mal alte Zöpfe abschneiden.

himitsu 31. Aug 2023 22:27

AW: WideString vs String in Delphi 11.3
 
Außerdem nutzen die LongStrings von Delphi (AnsiString, UnicodeString, UTF8String, RawByteString usw.) noch so Anderes
* eine Referenzzählung (Result, Parameter ohne const, Kopieren ala a:=b; usw.)
* und Inplace-Resize (wobei das vom FastMM kommt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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-2025 by Thomas Breitkreuz