String-Objekt mit zig tausend Zeichen

Status
Nicht offen für weitere Antworten.
K

KartoffelKiffer

Gast
Hallo,

ich arbeite zurzeit an einer Webpräsenz mittels JSP.

Nun bin ich dabei die kompletten Ablaufschritte in einen Kern hinter die JSP's in ein Java-Projekt zu involvieren. Die JSP's greifen dann auf diese Ablaufschritte im Java-Projekt zurück. Hat den Sinn, dass es mehr Closed-Source aussieht (war so gewollt).

Jetzt bin ich an einem Teil angelangt, wo ich eine Schleife habe, die für jedes Element aus einer Datenbank (letzten Endes aus einem ResultSet gezogen) einen Eintrag in eine Select-Box schreibt.

Code:
out.println("<select>")
while(rs.next()) {

   out.println("<option>" + rs.getString("bla") + "</option>");
}
out.println("</select>");

War bisher auch kein Problem. Nur habe ich diesen Teil jetzt auch in mein Java-Projekt eingefügt und wollte es somit aus der JSP-Datei herausfiltern. In der JSP steht nun lediglich der Aufruf der Funktion aus dem Java-Projekt heraus. Die Funktion übergibt einen String mit dem Inhalt "<select><option>bla1</option><option>bla2</option></select> usw."

Allerdings kommt es ab und an vor, dass es bis bla(n) geht, teilweise bis zu mehreren tausend Einträgen. Wie sinnvoll es ist eine Auswahlliste mit solch Volumen zu gestalten möchte ich hier bitte nicht erläutern, es ist so gewünscht.

Jetzt kann man sich aber dementsprechend auch vorstellen, wie riesig mein String wird. Die Funktion arbeitet nun wiefolgt:

Code:
returnValue += "<select>")
while(rs.next()) {

   returnValue += "<option>" + rs.getString("bla") + "</option>";
}
returnValue += "</select>";

return returnValue;

Die Variable returnValue wird im JSP dann einfach ausgegeben und beinhaltet im Prinzip meine Auswahlliste.

Dieser Vorgang, das Anhängen des Textes "<option(...)" an die Variable returnValue, dauert bei mehreren tausend Einträgen aber einfach zu lange. So kommt es vor, dass der Aufruf der Seite mal eben 3min in Anspruch nimmt. (habe gerade nachgeschaut, der String umfasst eine Länge von über 350.000 Zeichen).

Jetzt offenbart sich mir die Frage, wie ich diesen Teil denn besser lösen könnte. Es geht einfach darum, dass ich ein Objekt benötige, das die komplette Auswahlliste mit allen Elementen gefüllt zurück an die JSP gibt.




Mfg Tom
 

Wildcard

Top Contributor
Ganz böser Fehler.
Stringkonkatenation mit '+' ist extrem performancelastig.
Dafür musst du einen StringBuilder nehmen.
 
K

KartoffelKiffer

Gast
Hallo,

habe einen StringBuffer genommen, das Ganze läuft nun in nicht mal einer Sekunde ab:

Code:
StringBuffer sb = new StringBuffer("<select>");

while(rs.next()) {

   sb.append("<option>" + rs.getString("bla") + "</option>");
}
sb.append("</select>");

return sb.toString();

Kann mich mit dieser Methode anfreunden, funktioniert einwandfrei. Wenn es Einwände Eurerseits gibt, ich nehm gern noch Kritik auf. Bisher ist noch kein Meister vom Himmel gefallen ;)



Mfg Tom
 

Wildcard

Top Contributor
StringBuffer geht zwar auch, aber StringBuilder ist noch schneller.
Code:
 sb.append("<option>" + rs.getString("bla") + "</option>");
Der gleiche Mist in grün.
Entferne jedes String + String aus deinem Code, sonst erzeugst du eine Unmenge von Objekten.
 

Wildcard

Top Contributor
Und noch was: wenn sich grob abschätzen lässt wir lang der String in etwa werden wird solltest du dem Buffer/Builder unbedingt eine entsprechene Kapazität setzen um aufwendiges neu allokieren zu vermeiden.
 
G

Gast

Gast
Hallo,

Der gleiche Mist in grün.

Welch Wortspiel :)

Aber ich stimme zu, habe gerade den StringBuffer durch den Builder ersetzt und es kommt mir tatsächlich noch schneller vor.

Ein letzter Codeschnippsel noch:

Code:
StringBuilder sb = new StringBuilder("<select>");

while(rs.next()) {

   sb.append("<option>");
   sb.append(rs.getString("bla"));
   sb.append("</option>");
}
sb.append("</select>");

return sb.toString();

So siehts nun aus und ich kann mich nun wirklich nicht mehr beschweren.

Ich danke für die Hilfe.



Mfg Tom
 

Wildcard

Top Contributor
Wie gesagt, eine ungefähre Kapazität im StringBuilder Konstruktor wäre noch zu empfehlen.
Wenn der sich vergrößert (was er bei dir sehr sehr oft tun muss), dann ist das eine teure Operation.
 
G

Gast

Gast
Hallo,

358460 Zeichen entspricht die Länge des aktuellen Strings. So ungefähr in dem Rahmen wird sie sich auch weiterhin bewegen.

Was ist denn, wenn die Größe darüber hinaus wächst? Müsste sich doch wie jetzt verhalten, sich einfach vergrößern oder nicht?



Mfg Tom
 

Wildcard

Top Contributor
Gast hat gesagt.:
Was ist denn, wenn die Größe darüber hinaus wächst? Müsste sich doch wie jetzt verhalten, sich einfach vergrößern oder nicht?
Ja, allerdings muss dabei umkopiert werden und neuer Speicher angefordert werden, daher versucht man die Größe so zu wählen das sie ausreicht.
 
G

Gast

Gast
Hallo,

ich bin durch. Der Geschwindigkeitsunterschied ist enorm.

Einen Nachteil hat das Ganze nun leider doch noch: Ich kann den Quelltext nicht mehr einsehen. Allein die 2 Auswahllisten benötigen nun gut 500.000 Byte, womit die Tidy-Überprüfung des Firefox scheinbar nicht mehr mitkommt.

Jetzt stellt sich mir die Frage, in welchem Ausmaße ich den StringBuilder nutzen sollte. Ist es generell zu sagen += ist sche... schlecht, oder ist es für minimale Anwendungen zumutbar?

Wäre kein allzu großer Aufwand auch andere Methoden darauf aufzubauen (nutze den += Operator schon ab und an mal).



Mfg Tom
 

Wildcard

Top Contributor
string1 + string2 wird in etwa zu
Code:
new StringBuilder(string1).append(string2).toString():
Wenn du also keine Schleife oder Rekursion hast die solchen Code oft aufruft ist das nicht dramatisch.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
P Objekt einer Klasse erzeugen, die als String vorliegt Allgemeine Java-Themen 3
multiholle Objekt einer Klasse anhand eines String erzeugen Allgemeine Java-Themen 3
V Aus String -> Objekt einer Klasse erzeugen Allgemeine Java-Themen 7
G String-Objekt mit Allgemeine Java-Themen 10
G Date-Objekt aus Datums-String erstellen Allgemeine Java-Themen 6
V Objekt einer Klasse, deren Name nur als String vorhanden Allgemeine Java-Themen 4
C EML Email Text in String wandeln Allgemeine Java-Themen 11
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18
AmsananKING String Iteration Allgemeine Java-Themen 5
S Shuffle String aus if-clause Allgemeine Java-Themen 11
Besset Variablen Ist String = "" + int inordnung? Allgemeine Java-Themen 6
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
S String Encoding Verständnisproblem Allgemeine Java-Themen 22
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
SaftigMelo Bug Fixen von String-spliten Allgemeine Java-Themen 8
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
YohnsonM String - Aufteilung und Nutzung einzelner Chars Allgemeine Java-Themen 7
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
S String umbenennen: wie? Allgemeine Java-Themen 4
x46 String Format Fehler Allgemeine Java-Themen 2
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
L String zu repräsentativen Wert Allgemeine Java-Themen 0
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
L regex ganzer string? Allgemeine Java-Themen 2
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
N String Array Eingabe Allgemeine Java-Themen 6
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
R char aus String entfernen Allgemeine Java-Themen 10
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Ini Text aus String parsen Allgemeine Java-Themen 1
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
R Variablen String mit split-Funktion aufteilen Allgemeine Java-Themen 7
F Datei in String-Array einlesen Allgemeine Java-Themen 8
S Marker aus String ermitteln Allgemeine Java-Themen 5
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
S MSSQL Exception & Connection String Allgemeine Java-Themen 19
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J String - Vergleiche Allgemeine Java-Themen 7
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
G CSV in String Allgemeine Java-Themen 7
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
F In String 2 Buchstaben vertauschen Allgemeine Java-Themen 2
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
J Falls der String ein "X" beinhaltet Allgemeine Java-Themen 2
T String mehrere Worte Allgemeine Java-Themen 2
D String Groß-/Kleinschreibung Allgemeine Java-Themen 2
D String und Klassenvariable Allgemeine Java-Themen 6
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
C String in Objektnamen umwandeln Allgemeine Java-Themen 3
E Variablen Aus .txt ausgelesener string mit if() überprüfen? Allgemeine Java-Themen 2
L String-Schema-Aufspaltung Allgemeine Java-Themen 2
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
L String splitten und multiplizeren Allgemeine Java-Themen 10
G String mit umbekannter länge splitten. Allgemeine Java-Themen 2
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
A Byte zu String Allgemeine Java-Themen 4
T Komplexitätsoptimierung String vergleich Allgemeine Java-Themen 4
heinz ketchup String im JLabel ausgeben und erneuern Allgemeine Java-Themen 6
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
V Eingegeben String Splitten und in Integer umwandeln Allgemeine Java-Themen 2
L Decrypt String Allgemeine Java-Themen 1
X Variablen AtmicLong größer als String ? Allgemeine Java-Themen 4
S String literal und Referenzvariablen Allgemeine Java-Themen 6
J Datentypen Absätze mit String im Word Dokument Allgemeine Java-Themen 3
D "Paste" String doppelt Allgemeine Java-Themen 14
E String Frage Allgemeine Java-Themen 9
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
D JSON to String Allgemeine Java-Themen 31
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben