Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: jor am 18.07.06 - 10:43:12
-
Hallo zusammen,
ich würde mich freuen, wenn mir jemand folgende Frage beantworten kann:
Ich habe einen eigenen Datentyp erstellt, in diesem sind fünf Datenfelder vom Typ String enthalten.
Mit der Angabe "ReDim liste(anz) as myDatentyp" möchte ich das Array auf etwas mehr als 70.000
Datensätze bringen. Bekomme aber immer eine Overflow-Meldung, beim ca 40.000ten Eintrag.
Die Speicherauslastung im Taskmanager sieht ok aus, bei Abbruch sind noch mehr als 200 MB aktuell zur Verfügung.
Wird solch ein Array auf Zeilenanzahl oder auf die Menge an eingelesenen Daten begrenzt? Habe im INet bei meiner Suche nichts gefunden.
-
Felder / Arrays > max 64 KByte
Wenn du den Index selbst verwaltest, ein signed Integer geht nur bis 32768. Nimmst halt Long :)
-
Hi Oxse,
danke für deine Antwort, aber ich muss gestehen, ich habe schon Long als Datentyp für die
Deklarationsvariable genommen, aber vergessen dieses zu erwähnen ::) .
-
dein Array könnte auch von -32768 bis 32767 gehen.
Schau Dir dazu in der Designer-Hilfe mal das Dokument "Limits on array variables in LotusScript" an.
-
Schau mal hier Dominolimits (http://www.geniisoft.com/showcase.nsf/DominoLimits)
André
-
Hi Dirk,
danke für den Tipp. Ich werde gleich mal auf die Suche gehen, momentan ist mein Notes-Task mehr als busy :-\ , und der Rechner ist dadurch belegt. Habe die Routine umprogrammiert und arbeite jetzt mit DocumentCollection, ist aber sehr zeitraubend, da vor der Verarbeitung eines Datensatzes jedesmal
nachgeschaut werden muss, ob dieser schon vorhanden ist (Vergleich über mehrere Felder, wenn der erste Vergleich True zurück gibt). Werde die Erstellung der Collection an den Anfang setzen, ist dann zwar nicht 100% aktuell, abe rich zu verschmerzen.
Danke für die Antworten nochmal an alle!
-
Hallo,
schau dir doch mal das List-Variablen an. Sie sind wahnsinnig schnell und sehr komfortabel.
Rainer
-
Hallo André,
vielen Dank für deine Antwort, eine sehr interessante Seite!!
-
Hallo Rainer,
danke für deine Antwort. Wenn mich jetzt nicht alles täuscht, dann kann ich in solch eine
Liste aber kein anderen Datentyp als String rein packen. Es ginge zwar auch so, da mein
Datentyp eine konstante Anzahl an Feldern hat, wäre aber beim Drüberlaufen bisschen
herausfordernd (Index und so).
Ist aber ein Vorschlag, den ich mir noch offen halte, danke.
-
... da du den Weg über die Collection genommen hast - es empfiehlt sich die Dokumente dann mit GetFirstDocument < = > GetNextDocument zu initialsieren - GetNthDocument hat bei vielen Dokumenten deutliche Nachteile in der Performance...
Toni
-
Hallo,
eine List-Variable kenn jeden Datentyp annehmen. Die Verwaltung der Einträge erfplgt über einen eindeutige Schlüssel und dieser und nur dieser muß ein String sein.
Rainer
-
danke für deine Antwort. Wenn mich jetzt nicht alles täuscht, dann kann ich in solch eine
Liste aber kein anderen Datentyp als String rein packen.
Das ist jetzt absolut und mega FALSCH.
In eine Liste kannst du alles reinpacken. Notesdocuments, ViewCollections, Strings, Integer, andere Listen, Types das ist vollkommen wurscht.
Das einzige was nicht geht (ich hab es zumindest noch ncht rausgefunden wie, sollte also jemand das schon mal gelöst haben wäre ich für einen Hinweis an dieser Stelle dankbar) ist in einen Type eine List einzubauen die wieder rum in einer List steckt. Da meckert der Compiler.
Also noch mal
type yourtypename
name1 as string
name2 as integer
name3 as variant
end type
dim wasauchimmerduwillst list as yourtypename
funktioniert OHNE JEDES PROBLEM
-
Datensätze bringen. Bekomme aber immer eine Overflow-Meldung, beim ca 40.000ten Eintrag.
Davon abgesehen würde ich da ja gar zu gerne einmal den Sourcecode dazu sehen. ReDims die immer wieder aufgerufen werden sind bei entsprechenden Datenmengen, und von denen reden wir hier ja, so ziemlich das grottenschlechteste was es an Performance überhaupt geben kann.
-
Hallo Rainer,
danke für die Info, ich werde es mit den Listen mal ausprobieren, da muss ich dann doch auf dem
falschen Dampfer gewesen sein. ;)
-
Hallo Thomas,
danke für deinen Tipp, ich werde mir die List-Geschichte nochmal in Ruhe anschauen.
Das Re-Dimensionieren der Variable mache ich aber nicht permanent oder in gewissen
Zyklen, sondern nur einmalig am Start der ganzen Routine, nach dem ich weis, wie viel
Datensätze ich bearbeiten muss/werde.
Danke nochmal an alle!