max Größe bei TImage?
-
Hallo,
Ich bekam gerade das folgende Problem vorgelegt:
Bei einem Program, welches ich bereits vor längerer Zeit geschrieben habe, ist nun einer der Nutzer auf die Idee gekommen, es mit einer sehr großen Datenmenge zu füttern.
Abhängig von dieser Datenmenge werden im Program 2 Bilder generiert. In diesem Fall sind diese Bilder dann jeweils 55530*378=20990340 Pixel groß.
Nun kachelt das Program mit einer Out-of-Memory Warnung ab. Im Debugger bleibt es bei der Codezeile stehen, in der zum ersten mal dem Pen des ersten Bildes eine neue Farbe zugewiesen wird.
Die Größenfestlegung des Bildes läuft bereits vorher problemlos durch.Kann es sein, das ein TImage eine maximale Größe hat?
Oder gibt es eine andere Erklärung für dieses Verhalten?
Bei kleineren Datenmengen läuft das Programm problemlos.Bin für jede Hilfe dankbar.
Gruß,
chris_f
-
Na ja, fuer 20MPixel brauchts 40 - 60 MB im RAM PRO Bild.
Und soweit ich weiss, muss das je am Stueck sein!
Da ist der RAM zu knapp, oder 'fragmentiert'.PS: passiert das immer - wenn schon viel am PC gemacht wurde - oder auch gleich nach Systemstart? Wieviel RAM hat der PC?
-
Ich habe das auf verschiedenen Rechnern getestet. Die hatten 512 bis 1024MB RAM und sind auch neu gestartet worden. Die Speicherauslastung liegt zum Zeitpunkt des Problems laut Task-Manager bei etwa 355MB. Von daher habe ich nicht an dieses Problem geglaubt. Zumindest im Auslagerungsspeicher sollte, denke ich mal, noch genug Platz sein. Zudem ist das Bild zum Zeitpunkt des Absturzes ja bereits in seiner Größe definiert.
Das Problem tritt sowohl bei Win2k als auch bei WinXP auf. Andere Betriebssysteme habe ich nicht zur Verfügung.
-
Mit der Auslagerung duerfte das nicht klappen. Zum Zugriff muss das Ganze im RAM sein.
Ev. ist der Index zu hoch (fuer Zugriff auf Pixel)? Klappt das mit Bildern. die kleiner als 32766 sind?
-
Scheint doch ein Speicherproblem zu sein.
Beim Versuch die maximale Größe zu ermitteln habe ich es jetzt geschafft ihn dahingehend zu bringen, eines der beiden Bilder zu erzeugen. Er kann also ein Bild dieser Größe durchaus verarbeiten. Offensichtlich war dann ein ausreichender Speicherabschnitt frei.
Das heißt, ich kann mir jetzt überlegen, wie ich die Bilder in kleine Portionen zerlege.
Oder gibt es Methoden den RAM sozusagen zu defragmentieren?Vielen Dank für die Hilfe.
Gruß,
chris_f
-
Ich hab' mal versucht ein 'grosses' Bild zu erzeugen:
- bis Abmessungen <32767 klappt das
- ab Abmessung >=32768 kommt ne Fehlermeldung- Sind beide Abmessungen sehr hoch (..10000..) kommt OutOfMemory
PS: Ich hab' nur 256 MB RAM - 64MB geht fuer Kraka ab.
-
@ DerAltenburger
Ich hab das Problem jetzt umgangen, in dem ich die Anzeige in mehrere Bilder aufgeteilt habe.
Vielen Dank für Deine Hilfe.