Forums Neueste Beiträge
 

ab ca. 200MB: "Nicht genügend Zeichenfolgenspeicher"

03/11/2011 - 11:58 von Dieter Strassner | Report spam
Hallo NG'ler,


mich beschàftigt schon wieder mal leidige Problem des endlichen Speichers...

In meiner Anwendung tritt nachwievor sporadisch in besonderen Situationen
der Fehler 14 "Nicht genügend Zeichenfolgenspeicher" auf.

Habe daraufhin mittels Testprogramm mit einer ConCat-Klasse

dies hier ablaufen lassen:

Set cc = New ConCat
For i = 1 To 1000000
cc.ConCat String(512, "x")
Next i

bei i 9122 (entspricht ca. 204 MB) steigt VB in der IDE aus (auch als
EXE)

Jetzt habe ich mal einen zusàtzlichen String mit 10.000 zeichen ( .000
Bytes) aufgenommen, jetzt steigt VB6 bereits bei ii701 aus.
Nehme ich den String weider raus, bleibt es dennoch bei 69701 !? <ich
versteh es (noch) nicht.>


Dieses sonderbare Verhalten habe ich auch in der Anwendung: Eine bestimmte
Konstellation làuft prima ab, irgendwann spàter dann nicht mehr.
Die Daten sind augenscheinlich immer die gleichen, die Randbedingungen auch.

Am Hauptspeicher kann es hier auf meinem PC nicht liegen, der PC hat 3GB,
davon maximal 600MB in Benutzung (wàhrend die Fehlermeldung 14 angezeigt
wird).

VB6 verarbeitet bekanntlich bis zu 2 GB je Applikation. ich nehme mal an, da
zàhlt alles mit was zum Prozess gehört.

Bei einem Testprogramm kommt aus der Mini-exe und der VB-Runtime m.W. nach
nicht allzu viel dazu, was dann den großen rest von 1,8 GB-RAM auffressen
würde. zumal die Anwednung nie größer als ca. 210 MB wird.

Gibt es ncoh andere Beschrànkungen?

Gibt es noch was "besseres" als eine ConCat-Klasse zur Stringverarbeitung zu
benutzen?
Hat jemand eine Idee wie ich den nutzbaren VB6-Stringspeicher "dauerhaft"
vergrößern kann (siehe wg. obiges Testverhalten).


Mit temporàren ausladen auf Platte habe ich auch schon gedanklich
herumexpirmentiert, aber das die eigentlcihe Anwendung den String
schlußendlich wieder im Speicher benötigt wird (und dann auch noch nach WORD
transferieren muß), bin ich davon schnell wieder weg.

Alle unnötigen Klassen rechtzeitlich zerstören um Platz zugewinnen habe ich
wchon umgesetzt, dto. mit ADODb:Recordsets und Arrays.

Viele Grüße - Dieter

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz
 

Lesen sie die antworten

#1 Martin KoWi
03/11/2011 - 13:37 | Warnen spam
Hallo,

die Grenze für Strings dürfte wohl eher in der Nàhe von 256MB liegen!

Um evtl. Fehler in der ConCat-Klasse auszuschließen kannst du es einfach
mal mit einen einzigen String versuchen:

S = String(200& * 1024& * 1024&, "x")

hier ist bei mir schon bei ca. 200 schluss!
und das ist noch nicht mal ein halbes GB.

irgendwo hatte ich (glaube ich) noch einen anderen Stringbuilder, der
anders Speicher alloziert hat, und deutlich mehr konnte - bin aber nicht
sicher und muss erst suchen.

gruß, martin.

Ähnliche fragen