OutOfMemoryException bei New Picture

Hallo in die Runde.
Irgendwann wurde die Funktion New Picture derart umgestellt, dass es einen Fehler gibt, wenn man für die Breite oder Höhe den Wert 0 vorgibt.
Das kam bei mir zwischenzeitlich schon mal vor, weshalb ich mir eine eigene Routine dafür gebastelt habe.

Jetzt bekomme ich dort eine OutOfMemoryException gemeldet und verstehe nicht weshalb.
Hier ein Bild, wie es mir Xojo (2017r1) anbietet:

Im unteren Teil ist ein Ausschnitt der Aktivitätsanzeige zu sehen. Demnach sollte es kein Speicherproblem geben. Selbst wenn der physikalische Speicher knapp werden sollte, würde doch ausgelagert. Demnach kann es doch eigentlich nie zu einer OutOfMemoryException kommen. OK, das Bild ist nicht wirklich klein (wenn ich richtig gerechnet habe etwa 2,1GB).

Normalerweise läuft die Routine auch immer problemfrei durch. Ich hatte erst eine Anwendermeldung diesbezüglich und jetzt das erste Mal hier bei mir.

Vieleicht ist es noch wichtig zu wissen, dass zwischen Auftreten des Fehlers und Erstellung des Bildes der Aktivitätsanzeige einige Stunden nicht am Rechner war. Es kann also zum Fehlerzeitpunkt etwas anderes ausgesehen haben.

Hat jemand eine Idee, wo das Problem liegt?
Oder besser, wie ich es vermeide?

Gruß, Stefan Mettenbrink.

Sind das nicht über 3 GB? Dann hat Dein Programm bestimmt das eine oder andere gewerkelt, sprich der Speicher ist schon ein wenig fragmentiert. Dann kann es leicht sein, daß keine 3 GB mehr verfügbar sind. Entweder machst Du das Bild kleiner oder Du gehst auf 64bit.

19842 x 27874 x (32/4) = 2,2 GB

-> Beatrix:
Ich habe so gerechnet wir Eli :slight_smile:

Selbst wenn der Speicher durch Fragmentierung keine 2GB mehr bieten sollte, müsste das dann nicht automatisch aufgeräumt werden?
Die Aktivitätsanzeige zeigt jedenfalls nur 32MB als Speicherbedarf an. Das sollte also selbst für 32Bit Anwendungen genügen.
Ein neues Projekt mit diesem Code:
Sub Open()
dim p as picture
p=new picture(19842,27874,32)
Break
End Sub

hat keine Probleme.

Viel wichtiger wäre mir, wie ich im Vorfeld erkennen kann, dass ich ein Problem bekomme. Kann ich den verfügbaren Speicherplatz erfragen?

Ich habe gerade obigen Prüfcode erweitert und bekomme hiermit Probleme:
p=New Picture(min(max(1,19842),32000),min(max(1,27874),32000),32)

Ich werde mal weiter testen.

Ah, hatte nur 32k*32k gesehen.

Die Speicherfragmentierung wird nicht automatisch aufgerumt. Das ist keine Festplatte. Bei Xojo fhrte das z.B. zu den hufigen Abstrzen beim Kompilieren fr 64bit. Auch da konnte ich sehen, da der Speicher nur bis ca. 1 GB belegt ist.

Hast Du es schon mit einem Try/Catch versucht? Es kann sein, da das dann nicht geht, weil ja der Speicher belegt ist.

Mit Try/Catch kann die die Fehlermeldung abfangen und Nil zurückliefern. In dem Fall wird dann eine kleinere Version ausgegeben. Da hatte ich offenbar schon dran gedacht :slight_smile:

Die 64-Bit Variante hat da tatsächlich kein Problem.

Danke für die Unterstützung.