AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein WideString vs String in Delphi 11.3
Thema durchsuchen
Ansicht
Themen-Optionen

WideString vs String in Delphi 11.3

Ein Thema von backdraft · begonnen am 31. Aug 2023 · letzter Beitrag vom 31. Aug 2023
Antwort Antwort
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#1

WideString vs String in Delphi 11.3

  Alt 31. Aug 2023, 22:27
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
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.582 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: WideString vs String in Delphi 11.3

  Alt 31. Aug 2023, 22:39
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...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!

Geändert von jaenicke (31. Aug 2023 um 22:41 Uhr)
  Mit Zitat antworten Zitat
backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: WideString vs String in Delphi 11.3

  Alt 31. Aug 2023, 22:56
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.
Oliver
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: WideString vs String in Delphi 11.3

  Alt 31. Aug 2023, 23:27
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (31. Aug 2023 um 23:29 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz