tim staeglich
Mitglied
Hi,
bei Client-/Serveranwendungen (wie überall) ist die Performance sehr wichtig. Daher würde ich meinen Vorrednern beipflichten - unterteile Deine Ergebnisse in Häppchen.
Bei Strings z.B. kann man im Extremfall byte weise übertragen.
Noch ein anderes Problem: Selbst ein gutes DBMS ist nicht schnell, wenn man ein select macht, bei welchem n-tausend Zeilen herauskommen. Deshalb hier ein Denkansatz mit etwas Pseudocode.
Du solltest die Ergebnisspalten von vornherein mit einem "limit" SQL Befehl begrenzen. Oder/und: Du könntest die Abfrage nach IDs in Intervalle unterteilen (where id between startIndex and endIndex).
Dann iterierst Du die Indexe hoch, z.B.:
- startIndex=0, endIndex =100
- Abfrage
- wenn Ergebnis wirklich 99 Zeilen umfasst, zähle hoch
- startIndex = 101, endIndex = 200
- Abfrage
- usw...
Zusätzlich kannst Du probieren,
Jedes Ergebnis ResultSet zeilenweise zu senden/empfangen.
Das Senden initiierst Du, indem Du einen Buffer (z.B. ResulSet Array) einrichtest,
der beim Senden abgearbeitet wird. D.h. für jede erfolgreiche Abfrage fügst Du einem (z.B.) ArrayList Buffer dieses ResultSet hinzu. Dann iterierst Du die BufferList durch,
gibst die Ergebnisse in dem jeweiligen ResultSet aus
Noch ein Tipp: Check mal Dein Programm auf Rekursionen.
Selbst bei noch so vielen Array Einträgen, ist ein OOME unwahrscheinlich.
In Deinem Code gibt es Möglichkeiten für Rekursionen in Methoden, allerdings kann ich die ja nicht einsehen/nachprüfen.
Ruft Dein Programm sich irgendwo irgendwie selbst auf?
VG Tim
bei Client-/Serveranwendungen (wie überall) ist die Performance sehr wichtig. Daher würde ich meinen Vorrednern beipflichten - unterteile Deine Ergebnisse in Häppchen.
Bei Strings z.B. kann man im Extremfall byte weise übertragen.
Noch ein anderes Problem: Selbst ein gutes DBMS ist nicht schnell, wenn man ein select macht, bei welchem n-tausend Zeilen herauskommen. Deshalb hier ein Denkansatz mit etwas Pseudocode.
Du solltest die Ergebnisspalten von vornherein mit einem "limit" SQL Befehl begrenzen. Oder/und: Du könntest die Abfrage nach IDs in Intervalle unterteilen (where id between startIndex and endIndex).
Dann iterierst Du die Indexe hoch, z.B.:
- startIndex=0, endIndex =100
- Abfrage
- wenn Ergebnis wirklich 99 Zeilen umfasst, zähle hoch
- startIndex = 101, endIndex = 200
- Abfrage
- usw...
Zusätzlich kannst Du probieren,
Jedes Ergebnis ResultSet zeilenweise zu senden/empfangen.
Das Senden initiierst Du, indem Du einen Buffer (z.B. ResulSet Array) einrichtest,
der beim Senden abgearbeitet wird. D.h. für jede erfolgreiche Abfrage fügst Du einem (z.B.) ArrayList Buffer dieses ResultSet hinzu. Dann iterierst Du die BufferList durch,
gibst die Ergebnisse in dem jeweiligen ResultSet aus
Noch ein Tipp: Check mal Dein Programm auf Rekursionen.
Selbst bei noch so vielen Array Einträgen, ist ein OOME unwahrscheinlich.
In Deinem Code gibt es Möglichkeiten für Rekursionen in Methoden, allerdings kann ich die ja nicht einsehen/nachprüfen.
Ruft Dein Programm sich irgendwo irgendwie selbst auf?
VG Tim