Speicherprobleme

19/11/2011 - 16:05 von R.Kantas | Report spam
Ich bekomme mittlerweile 'not enough memory' o.à. beim Kompilieren. Dazu
zwei habe ich 2 Fragen:

1. Wokann ich eigentlich sehen, wie nahe die einzelnen Speicherbereiche am
64kB-Limit sind? Die Lànge des Quellcodes ist da je wenig aufschlußreich.

2. Wieso kriege ich o.g. out-of-Memory-Fehler bereits beim Kompilieren (!),
wenn ich im Load-Ereignis einer Form sechs Instanzen eines umfangreichen
UserControls dynamisch lade, nicht aber, wenn ich diese sechs gleich fest
auf die Form pflanze?

Danke,
rokas
 

Lesen sie die antworten

#1 Thorsten Albers
20/11/2011 - 00:22 | Warnen spam
R.Kantas schrieb im Beitrag <ja8gjs$4lr$...
Ich bekomme mittlerweile 'not enough memory' o.à. beim Kompilieren. Dazu
zwei habe ich 2 Fragen:

1. Wokann ich eigentlich sehen, wie nahe die einzelnen Speicherbereiche


am
64kB-Limit sind? Die Lànge des Quellcodes ist da je wenig aufschlußreich.



Vermutung:
Du mußt Dich zwischen IDE und Compiler schalten. Da der Compiler - auch von
der IDE - über die Kommando-Zeile gesteuert wird, muß man ein Programm
gleichen Namens erstellen, daß die Kommando-Zeile von der VB-IDE in Empfang
nimmt und an den Compiler weiterreicht, und gleiches dann mit dem Ergebnis
in umgekehrter Richtung. Durch Ergànzung/Abànderung bestimmter
Kommando-Zeilen-Parameter sollte sich das Kompilier-Ergebnis so
manipulieren lassen, daß sich die gesuchte Information daraus ersehen làßt,
z.B. anhand der Größe der erzeugten OBJ-Dateien.
Möglicherweise meldet der Compiler sogar einen Fehler bzw. eine Warnung,
nur wird der von der IDE nicht berücksichtigt...

Ein Beispiel für so eine 'Zwischenschicht:
<http://www.vbarchiv.net/tipps/details.php?id89>

Weitere sollten sich mit den Stichwörtern "VB" und "C2.EXE" finden lassen.
Ich erinnere mich, daß es irgendwo im Netz sogar ein Projekt zum Download
gab, das alleine darauf abzielte, beim Kompilieren zusàtzliche Optionen
bereitzustellen - leider habe ich die URl nicht mehr...

Es gilt natürlich, daß man generell bemüht sein sollte, Module nicht zu
groß werden zu lassen. Probleme mit dem 64K-Speicherlimit sind meist ein
Hinweis auf fehlende Unterteilung in zweckmàßige Module - oder natürlich
auf extensiven Einsatz von nicht-dynamischen Variablen.

2. Wieso kriege ich o.g. out-of-Memory-Fehler bereits beim Kompilieren


(!),
wenn ich im Load-Ereignis einer Form sechs Instanzen eines umfangreichen
UserControls dynamisch lade, nicht aber, wenn ich diese sechs gleich fest

auf die Form pflanze?



Weil es sich um einen Fehler handelt, der durch zu umfangreichen
_statischen_ Speicher verursacht wird. Den Verbrauch an statischem Speicher
kann VB bereits zur Kompilier-Zeit berechnen. Da diese 64K-Grenze aber
etwas schwammig ist (es kann auch schon 'mal bei weniger als 64K zu einem
Fehler kommen), und da VB selbst meinem Eindruck nach die Berechnung nicht
immer korrekt durchführt, ist es ein bischen wie Roulette, wann und in
welcher Form ein diesbezüglicher Fehler auftritt.

Thorsten Albers

gudea at gmx.de

Ähnliche fragen