Re: Sporadische Speicherprobleme



Hallo Uwe,

ich bekomme sporadisch die Fehlermeldung, dass zu wenig Speicher zur
Verfügung steht um den Vorgang abzuschließen. (Auf WM2003 und WM5)
Dabei sind noch 80MB (von 100 MB vor dem Programmstart) an Arbeitsspeicher
frei wenn die Fehlermeldung erscheint.
Der Fehler tritt bei einem einfachen SQL-SELECT auf
(z.B. SELECT Feld FROM Tabelle WHERE Feld = Wert ORDER BY Feld ASC)

Hat jemand eine Idee was das sein könnte?
Hat das evtl. irgendwas mit der 32MB Grenze des virtuellen Prozess-Speichers
zu tun? Allerdings, nimmt der laufende Prozess (also die komplette Anwendung)
im Fehlerfall höchstens 20MB in Anspruch.

20 MB sind sehr viel. Ein Programm kann unter Windows CE maximal 32 MB
ansprechen. Innerhalb dieses kleinen Proßessraumes werden zudem noch
Speicherbereiche für alle im System geladenen DLL's (auch die der anderen
Prozesse) reserviert. Auf einem modernen System mit vielen geladenen
Modulen bleibt dann von den 32 MB nur noch wenig übrig.

Muss ich vielleicht irgendwie Speicher beim programmstart reservieren (mit
VirtalAlloc() oder einer ähnlichen Funktion)

Jede Speicheranforderung wird an einer 64 KB-Grenze ausgerichtet.
Nutzt Du sehr viele kleine Speicherblöcke gleichzeitig, ist bei einer Anzahl von
512 Objekten Schluß (512 * 64 KB = 32 MB). In der Praxis sind es aber deutlich
weniger Speicherobjekte (siehe oben).
Selbst wenn jeder Speicherblock nur 1 KB groß ist, würde das System bei etwa
400 Objekten (= 400 KB) nicht mehr genügend freien (virtuellen) Speicher
melden.

Siehe: http://msdn2.microsoft.com/en-us/library/ms836325.aspx

Ich weiß nicht, ob dieser Fall bei Dir zutreffen könnte bzw. wie eVB für Objekte
und Strukturen Speicher anfordert bzw. diese verwaltet.

Falls ja, wäre es nett, wenn mir jemand Tipps geben könnte, wie man diese API-
Funktionen einsetzt.

Siehe o.g. Link. Ob ein sinnvoller Einsatz unter eVB möglich ist, kann ich Dir
nicht sagen.

Oder bin ich auf dem Holzweg und es hat mit etwas anderem zu tun?

Ich arbeite noch mit eVB 3.0 und SQLServerCE.

Hierzu kann ich Dir leider gar nichts schreiben.

Gruß Wolfgang

.