Out of String Space in Visual Basic 6
Wir bekommen eine Fehlermeldung in einer VB6-Anwendung, die sendet Daten hin und her über TCP-sockets. Wir bekommen einen Laufzeitfehler "nicht genügend zeichenfolgenspeicher". Hat jemand diese gesehen oder haben Sie irgendwelche Gedanken auf, warum das passieren würde? Es scheint, wie wir schlagen einige VB6-Schwelle, so dass alle anderen Gedanken wäre auch hilfreich.
- Könnten Sie fügen Sie den code um die Zeile, die wieder den Fehler ?
- Die Deklarationen der Variablen, die nützlich sein könnten, zu
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie andere haben darauf hingewiesen, jede Verkettung von Strings in VB ordnet eine neue Zeichenfolge, und dann kopieren Sie die Daten über und dann de-allocate der ursprünglichen, sobald Sie können. In einer Schleife, dies kann zu Problemen führen.
Um dies zu umgehen, können Sie erstellen eine einfache Klasse StringBuilder wie diese:
Diese Klasse wird minimieren Sie die Anzahl der string-Zuweisungen durch das erzwingen der string aufgebaut werden mit Leerzeichen drin und dann überschreiben Sie die Räume als benötigt. Es re-ordnet, um etwa das doppelte seiner Größe, wenn es feststellt, dass nicht genügend Speicherplatz pre-initialized. Die Text-Methode zurück, die Teil des Strings, der tatsächlich verwendet wird.
Text finden Sie auf MSDN:
http://msdn.microsoft.com/en-us/library/aa264524(VS.60).aspx
Hinzufügen zu Jacco Antwort, vbAccelerator hat einen großen String-Builder-Klasse, die das leistet, viel die gleiche Sache, aber ist ein wenig mehr robust. Der Autor Spaziergänge durch die Lösung erklären, wie es funktioniert.
Davon aus, dass Sie anfügen von Daten in einer Schleife, sicherzustellen, dass es nicht angehängt wird, um sich selbst, die fressen Speicher extrem schnell.
Beispiel und Beschreibung der Fehler bedeutet:
http://msdn.microsoft.com/en-us/library/aa264524.aspx
Irgendwann im Frühjahr 2009, Microsoft habe ein XP-update, das stört mit der Armadillo/Silicon Realms-wrapper.
Die Zeile des Codes, warf Fehler 14, Out of String space war nicht logisch. Es war kein problem mit einem großen string. Es war eine einfache Aufgabe, die ich auch geändert, um "foo" und Fehler 14 noch aufgetreten. Ich denke, dass der Fehler falsch zugeordnet in XP.
Die Antwort für uns war das entfernen copyMem-11 aus der Armadillo-Schutz-Projekt und rewrap die die exe-Datei.
Es klingt wie Sie anfügen eine Zeichenfolge oft. Sie könnten versuchen, mit einem Die StringBuilder-Klasse
Auch, es könnte sein, Sie haben einige veraltete Objekte, die strings enthalten rumhängen, die nicht mehr verwendet und sollte befreit werden. Überprüfen Sie für zirkuläre Verweise vielleicht durch das logging-Objekt Reservierung/befreit in
Class_Initialize/Class_Finalize