Welche Auswirkungen (falls vorhanden) schaltet Delphi 2009 Unicode (/ UTF16) hat auf ausführbare Größe und Speicherbedarf?
-
01-07-2019 - |
Frage
Hier ist man von der „Keine Frage ist zu dumm“ Abteilung:
Nun, da das Thema sagt: Gibt es eine Wirkung? Wenn ja, wie viel? Werden alle Stringliterale ich in meinem Code haben und in meine DFM Ressourcen nehmen nun doppelt so viel Platz in den kompilierten Binärdateien? Was ist Runtime-Speichernutzung von kompilierten Anwendungen? Werden alle String-Variablen jetzt doppelt so viel RAM aufnehmen? Sollte ich einmal die Mühe?
Ich erinnere mich, so etwas wie dies während einem der frühen Pre-Release-Webcasts gefragt, aber ich die Antwort nicht mehr erinnern kann. Und wie der Versuch sind nur 14 Tage, ich werde es nicht nur versuchen, mich vor den Bibliotheken von Drittanbietern I wurde aktualisiert müssen (angeblich in etwa einem Monat).
Lösung
D2009 verwendet UTF-16 für den Standard-String-Typen, obwohl Sie Variablen UTF-8 machen können, wenn Sie müssen.
Andere Tipps
Ich habe jetzt endlich meine Hände auf Delphi 2009 bekommen und nach den erforderlichen Anpassungen jetzt mein Projekt kompiliert und läuft gut. :)
Um Ergebnisse zu erhalten schnell musste ich einen Kommentar aus zunächst etwas komplexer Modul der App, so dass es nicht zu 100% vergleichbar ist noch nicht, aber es scheint schon sicher genug, um vorherzusagen, dass trotz einer signifikanten Menge von Stringliterale in unserem Quellcode (übermäßige Debug-Log-Meldungen) die Größe der binären mit Delphi 2009 kompiliert wird wahrscheinlich in etwa gleich sein wie zuvor - wenn nicht sogar weniger
Ich frage mich, wird der Delphi-Compiler ausführen eigentlich jede Art von Kompression auf die Binärdateien oder zumindest seine Ressourcen Abschnitte in irgendeiner Weise? Ich habe wirklich würde die Änderung zu UTF-16 Stringliterale erwartete einen größeren Einfluss in dieser speziellen App zu haben. Sind die Literale wirklich gespeichert als (unkomprimiert) UTF-16 innerhalb der binären?
Ich habe keine Zeit gehabt, noch Unterschiede in den Speicherbedarf zu untersuchen.
EDIT: Nicht direkt Unicode-bezogene aber auf jeden Fall im Zusammenhang: Andreas Hausladen vor kurzem ein interessant wenig über die (signifikant) Auswirkungen der {$STRINGCHECKS}
Compiler-Option gebucht (BTW: standardmäßig aktiviert) auf ausführbare Datei kompilierte Größe: http://andy.jgknet.de/blog/?p=487
Ich habe zu viele Jahre für eine Unicode VCL warten, endlich sehen wir es. Ich glaube nicht, die meisten Anwendungen müssen über die Größe Probleme kümmern, da sie nicht haben, dass viele Stringliterale sowieso oder speichern riesige Mengen an Daten im Speicher.
Usability Probleme mehr gewichtet Unicode zu rechtfertigen, so viel wie möglich.
Wenn einige Entwickler ein winziges Ex schaffen wollen, können sie von Hand optimieren Ansi (falls i18n kein Problem ist).
Ich habe nicht Delphi in Jahren verwendet, aber es hängt wahrscheinlich auf das, was der Unicode-Codierung die sie verwenden. UTF8 wird genau das gleiche für den regulären ASCII-Zeichensatz (es verwendet nur mehr als ein Byte, wenn Sie in die exotischen Zeichen bekommen). UTF16 vielleicht ein bisschen aufgebläht sein.