| 

.NET C# Java Javascript Exception

Über viele Einträge iterieren: OutOfMemory

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Über viele Einträge iterieren: OutOfMemory

nabbla - 18.02.2008 21:53
Hi,

ich habe einige 100.000 Objekte die ich nach XML exportieren möchte. Mit Entity.list() geht es nicht, weil dann ja alles im Speicher gehalten würde, und das ist zuviel. Leider geht es auch mit der folgenden Lösung nicht, es wird nach und nach langsamer bis zum OutOfMemory:

int offset = 0
int max = 200

while (true) {
   List entities = Entity.withCriteria {
       // ...div. criteria, lasse ich mal weg...
       firstResult(offset)
       maxResults(max)
       order('id', 'asc')      // is this needed to avoid duplicates?
   }
   if (entities.size() == 0) {
       break
   }
   for (entity in entities) {
     // print out as XML
   }
   // hier habe ich noch session.flush(), evict() etc. versucht, nutzt auch nichts
   offset += max
}

Wie kann ich also schnell und ohne in Speicherprobleme zu kommen über große Objektmengen iterieren?


Re: Über viele Einträge iterieren: OutOfMemory

nabbla - 18.02.2008 22:52
krey schrieb:
-------------------------------------------------------
> Wieso bestimmst du dir nicht erst die Menge, bevor
> du in die Schleife läufst?

Weil dann meinem Verständnis nach alles im Speicher landet.

> Was hast du bei dem Server für einen maximalen
> Speicherverbrauch eingestellt?

Ich hatte es mit bis zu 700MB versucht.

> Welchen Applicationserver benutzt du? Welche
> Grails Version?

Grails 1.0, als Server sowohl Jetty (grails run-app) als auch Tomcat 5.

> firstResult(offset)
> maxResults(max)
>
> was tut das genau?

Das wählt "max" Einträge ab dem Eintrag "offset".


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Über viele Einträge iterieren: OutOfMemory" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.