![]() |
AW: Delphi und 64-Bit Programme
Zitat:
|
AW: Delphi und 64-Bit Programme
Zitat:
Übrigens ist WideString auch keine Alternative (eigentlich sogar ein Rückschritt), da das interne Datenformat auch hier 4 Bytes für die Länge reserviert - dummerweise diesmal in Bytes, so dass ein WideString nur halb so lang werden darf wie ein string. |
AW: Delphi und 64-Bit Programme
Hmm. Egal, ob ich Code für 64 Bit oder 32 Bit kompiliere, ich gehe davon aus, dass der Code - nur für sich genommen - funktioniert. Schnittstellen, Dateien etc sind außen vor, das ist bei UniCode ja auch so. Dass ich mir beim Compilieren für 64 Bit überlegen muss, ob mein Code per se funktioniert, ist nicht so toll. Woher weiß ich denn, was in der RTL nicht funktionieren würde?
|
AW: Delphi und 64-Bit Programme
Zitat:
Zitat:
|
AW: Delphi und 64-Bit Programme
Braucht man wirklich Strings mit Int64 Länge? Was soll das bringen.
Für grosse Daten gibts ja MemoryStreams - die haben auch nicht das Problem, dass zwischen irgendwelchen codepages hin und her gewandelt wird. Viele moderne Speicherformate verwenden nur 8 Bit, also RTF, XML, HTML ... da strings mit seinen WideChar zeichen auch nicht aussreicht alle Zeichen zu codieren. Die Speicherung solcher Daten in einen "string" fürhrt dann regelmässig zu 00nn00nn00nn00nn. Dass ein Integer 32 bit hat, auch unter 64 bit war meiner Ansicht nach die genau richtige Entscheidung, da der Entwickler so explizit die Möglichkeit hat zu entscheiden, ob der große Typ erforderlich ist, oder nicht und "alte" Programme 1:1 laufen. Wichtig ist es aber IntPtr zu verwenden für alle Integer die auch Speicheradressen sein können- typischerweise für die Übergabe an SendMessage u.ä. |
AW: Delphi und 64-Bit Programme
Zitat:
|
AW: Delphi und 64-Bit Programme
Zitat:
Man stelle sich nur mal vor, man würde eine 32GB Textdatei in einen solchen 64-Bit String einlesen. Ist die Datei UTF-8 codiert, kommen da ca. 64GB Speicherverbrauch zusammen. Da käme so manches handelsübliche Notebook schon an seine RAM-Grenzen und müsste Speicher auslagern, der dann später wieder eingelesen werden muss. Effizient geht anders. Ich wäre als wirklich an konkreten Beispielen interessiert, wo Strings mit mehr als 2^30 Zeichen notwendig oder hilfreich (bequemer zählt nicht) wären. |
AW: Delphi und 64-Bit Programme
Zitat:
Allerdings ging es garnicht um String sondern um TStrings (
Delphi-Quellcode:
).
System.Classes.TStrings
Zitat:
Delphi-Quellcode:
zu laden.
TStrings
Also ein Zeilenweises array of String. Das sollte doch gehen? Interessant ist die Frage, was passiert bei den Properties CommaText und Text, denn die sind
Delphi-Quellcode:
.
String
|
AW: Delphi und 64-Bit Programme
Zitat:
Aber mit TFileStream usw. gibt es ja sinnvolle Möglichkeiten für große Dateien. |
AW: Delphi und 64-Bit Programme
Zitat:
Zitat:
Aber wie Sebastian schon schreibt, spricht ja auch nichts dagegen eine Ableitung von TStringList zu schreiben, bei der die LoadFromStream/SaveToStream Implementierungen eben nicht über SetTextStr/GetTextStr laufen. Dann könnte man diese ja auch für größere Dateien verwenden. Als Nebeneffekt würde auch der interne Buffer für das Encoding wegfallen. Da liegt nämlich auch noch ein Speicherfresser: Erst wird ein Buffer angelegt, der den kompletten Inhalt der Datei in den Speicher lädt. Dann wird daraus anhand des Encodings ein String gemacht, bevor dieser dann zeilenweise zerlegt in die interne Liste wandert. Das braucht dann temporär mal eben so etwa 5x soviel Speicher wie die Datei groß ist (danach dann 2x). Wie man dann allerdings halbwegs performant mit so einer Monster-Stringliste umgehen soll steht auf einem anderen Blatt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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