Effiziente Stringverarbeitung

Die Klasse QString bietet die bequeme Möglichkeit Strings einfach mit dem + Operator aneinanderzuhängen.


QString hello = "Hello";
int number = 10;
ui->label->setText(hello + QString::number(number) + " World!");

Bei dieser Art des Stringbuildings besteht allerdings das Problem, dass 1. unnötig Speicher allokiert wird und 2. die Performance teilweise deutlich einbrechen kann - Die Klasse QString speichert die Stringlänge nicht, sondern berechnet sie, wenn es notwendig ist, jedes Mal neu.

Seit Qt 4.6 existiert die von Qt intern genutzte Klasse QStringBuilder und bietet damit, ähnlich wie in .NET, einen deutlich effizienteren Ansatz um Strings aneinanderzuhängen. Um diese Klasse zu nutzen ist lediglich ein Makro notwendig:


#define QT_USE_FAST_CONCATENATION

Ab diesem Zeitpunkt kann der QStringBuilder genutzt werden indem statt dem +, das % Zeichen zur Verbindung von mehreren Strings genutzt wird. Soll grundsätzlich jede Stringoperation mit dem QStringBuilder beschleunigt werden, kann mit dem folgenden Makro erreicht werden, dass gleich das + und nicht das % Zeichen beschleunigt wird:


#define QT_USE_FAST_OPERATOR_PLUS

In den nächsten Tagen werde ich mich mal an einen kleinen Benchmark setzen um euch ein kleines Gefühl für den Performancegewinn geben zu können.

Schöne Grüße,
Alexander Nassian

Sie haben Fragen zu unseren Trainings? Sie wollen eine Anfrage starten?
Einfach unser Kontaktformular ausfüllen und wir melden uns bei Ihnen.

+49 81 04 - 90 85 25 0