Image verbraucht trotz FreeImage RAM
Übersicht

![]() |
TheMatrixBetreff: Image verbraucht trotz FreeImage RAM |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leutz,
ich bin momentan am Werkeln eines Raumschiff Shooters und habe da die Option eingebaut, dass man die Auflösung ändern kann. Um das zu erreichen, wollte ich jedesmal beim ändern, die Bilder aus dem Speicher entfernen und neu laden. Jedoch vergrößert sich nach jeder Änderung die Auslagerungsdatei! Verzweiflung ist aufgetreten: "irgendwas muss ich doch übersehen haben." Bis ich nach längeren SelbstZweifeln zu diesem Test-Code gekommen bin: Code: [AUSKLAPPEN] ; Ein Bild auf der HDD erstellen If FileType("C:\Image.bmp") Then DeleteFile "C:\Image.bmp" img = CreateImage(10,10) SaveImage img,"C:\Image.bmp" FreeImage img Graphics 400,200,16,2 Text 0,0,"Drücke bitte Strg+Alt+Entf zusammen und betrachte" Text 0,15,"die Speicherauslastung für den Prozess 'blitzcc'" Text 200,45,"--- Taste zum Starten drücken ---",1 WaitKey() Cls Text 0,0,"ESC zum beenden drücken" : Flip ; Neuladen der Bilder While Not KeyHit(1) ; Das Bild laden img = LoadImage("C:\Image.bmp") ; Wieder löschen FreeImage img Wend und festgestellt habe, dass ich garkeinen Fehler gemacht habe, sondern BlitzBasic! |
||
°_° °.° °~° °v° .. -.- |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Witz war gut, wirklich sehr gut.
Du lädst ein Bild in der Schleife und fragst dich warum es den RAM flooded? Blitz eines Fehlers zu bezichten, wenn man den Anfängerfehler schlechthin macht (media in der mainloop laden), ist glaub so ziemlich das beste was ich an "joke" diese woche gelesen habe. Denn nur weil du dort ein FreeImage machst, ist der Speicher den das Bild eingenommen hat, noch lange nicht direkt wieder frei und für das Betriebssystem verfügbar (speziell wenn man Windows vor Windows 2000 hat, kann man das direkt vergessen da dort die Speicherverwaltung alles andere als das Gelbe vom Ei). Wenn du das nächste Mal einen Fehler findest, versuche ihn erst einmal in einem richtigen Codestück zu reproduzieren. Solange ein Load in einer endlosschleife steht, ist es selbst bei Free kein richtiges Codestück. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das weiß ich selber, das man so kein Image lädt. Mit jedem ImageLoad wollte ich die Auflösungsänderung eines Users simulieren. Denn jedes mal wenn er das macht, erhöht sich die Auslagerungsdatei! Das will ich eigentlich verhindern, da es nach mehereren Auflösungsänderungen zum Absturz kommen wird! Aber es wird wohl ein Fehler von Blitz sein, denn er verwaltet ja die Images. Und wenn ich FreeImage benutze, so müsste Blitz eigentlich den Angeforderten Speicher im RAM löschen... | ||
°_° °.° °~° °v° .. -.- |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der User kann und wird nicht in millisekunden die Auflösung wechseln.
Dein "Test" ist keine Simulation noch überhaupt im Ansatz real. Wenn du realistisch testen willst, pack EndGraphics und Graphics mit rein. Und dann schau nochmal ob die Probleme noch bestehen anstatt ziemlich blödsinn zu programmieren (dessen du dir schlimmerweise auch noch bewusst bist) und zu erwarten das das System zig MB in Millisekunden freigeben kann wenn du simultan weiter zumüllst. (XP kann das noch eher als die alten Windows. Da hast du mit der Loop nahezu eine CrashGarantie weil deren Speicherverwaltung verglichen zu 2000 / XP steinzeitlich war, da sie noch von Win95 her kommt.) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der User wechselt nich in Millisekunden die Bildschirmauflösung, aber da ich über 30MB Graphic ausgelagert habe, erhöht sich diese um 30MB nach jeder Bilschirmauflösung. D.H. son Spielkalb erhöht nach 10x mal ändern die Auslagerung um 300MB und das ist garnicht gut bei alten Rechnern.
Da ich nicht meinen ganzen Code repräsentieren wollte, hab ich so ein Programm geschrieben, was es annähernt verdeutlich. Du kannst auch delays von 2Sekunden einfügen, aber das wird wohl auch nichts an der Tatsache ändern, dass der Ramspeicher zugemülllt wird. Gibt es sonst keine Alternativen, die Auflösung zu ändern? |
||
°_° °.° °~° °v° .. -.- |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hab dein Prg. grad mit Delay 60 getestet, und es erhöht sich kein Speicher. | ||
antome |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du musst den Speicher beim Taskmanager 'Prozesse' --> blitzcc.exe betrachten. Der Speicher erhöht sich stetig um ein paar bytes. | ||
°_° °.° °~° °v° .. -.- |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich bin nicht blind oder bescheuert, er erhöht sich nicht.
Mach mal ein Delay rein und lass es laufen und sieh selbst nach. |
||
antome |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sagt ja auch keiner ![]() Habs ja gemacht und bei mir steigt es wieder. Zwar in kleinen Schritten, aber es steigt. Hast du denn auch eine Taste zum Starten gedrückt ![]() |
||
°_° °.° °~° °v° .. -.- |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach mal dein Delay hoch genug, Delay angaben sind in Milisekunden.
Wenn du in viel zu schnellen Schritten auf deine Festplatte zugreift kann das kein Programm der Welt so schnell erstellen und freigeben. Dreamora hat es dir schon erklärt. |
||
antome |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
das weiß ich selbser -.-. Hab dein Delay von 60MILLISEKUNDEN genommen, und der Speicher nimmt zu. Was bringst wenn ich das Delay hochsetze? Irgendwann wird der Speicher zu groß werden. In meinem Game wird ja auch viel mehr Grafik geladen. Da wird schon nach einmal neuladen, der Speicher ganz schön riesig.
Das ist nur ein Beispiel! Ich kann euch auch gern mein ganzes Spiel geben. Aber wozu wenn dort der selbe Fehler auftritt? ~Edit~ Also gibt es doch keine Möglichkeit die Auflösung zu ändern? Das wär jetzt ganz schön ärgerlich, da ich an diesem Teil meines Projektes ganz schön viel Zeit verbracht habe ![]() |
||
- Zuletzt bearbeitet von TheMatrix am Mo, Okt 02, 2006 13:20, insgesamt einmal bearbeitet
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vieleicht ist deine Platte langsamer als meine, dann setze das Delay noch höher
Teste es mit 500 das ist eine halbe Sekunde und du wirst sehen nichts erhöht sich. |
||
antome |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hehe, sicherlich nicht. Ich hab ein 3GHZ Rechner und meine HDD hat 7200rpm ![]() Und ich weiß auch das 250MS 1/4 Sekunden sind und 900Ms 8/9 Sekunden ![]() Für dich mag es unverändert sein, weil du das Delay so hochsetzt, aber es verändert sich dennoch. Warte 1 Sekunde und es erhöht sich um 8K |
||
°_° °.° °~° °v° .. -.- |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe in deinem Beispiel das Bild auf 1000 x 1000 vergrößert.
Habe es im Debug Modus ohne Debug Modus und als EXE laufen lassen. Es erhöht sich rein gar nichts. |
||
antome |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
The Matrix hat Folgendes geschrieben: Und ich weiß auch das 250MS 1/4 Sekunden sind und 900Ms 8/9 Sekunden
Mathe ist nicht dein Ding, heh? 900 ms sind nicht 8/9 Sekunden sondern 9/10tel Sekunden. Reicht es nicht eigentlich, nach der Änderung der Grafik, die Grafiken neu zu laden? |
||
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer: AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t Gewinner: BP Code Compo #2 Π=3.141592653589793238...<--- und das aus dem kopf ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja 8/9 sind ja ungefähr 9^^ (0,8 Periode
![]() @Antome: Ich glaube, du weißt echt nicht was ich mein. Ich rede von der Speicherauslastung, die von jedem Prozess im Taskmanager under 'Prozesse' angezeigt wird. Wenn ich auf 1000*1000 erhöhe, dann erhöht sich nach der Speicher nach jedem Delay um ein vielfaches. Entweder du hast ein Wunderrechner oder doch kein Plan ![]() @StepTiger: Das versuch ich doch. Ich will ja die Bilder neu laden, aber die Auslagerungsdatei erhöht sich nach erneuten laden um 30MB bei mir. Das is ja mein Problem ![]() |
||
°_° °.° °~° °v° .. -.- |
antome!!! gesperrt !!! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe deine Frechheiten satt such dir einen anderen Deppen den du ständig beleidigen kannst. | ||
antome |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs auch kurz (nagut, ca 5min) getestet. Speicherauslastung bleibt konstant.
It's your turn ![]() |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
TheMatrix |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Antome
Sorry, tut mir leid, wollt dich echt nicht beleidigen, oder sorgen das du so empfindest. Dann bin ich echt bescheuert! Ich habs auf 2 Rechnern probiert, und die Auslagerungsdatei steigt und steigt! Sicher, das ihr auch wirklich nachdem Programm start, eine Taste gedrückt habt, wenn das BB Fenster aktiv ist? Hier mal meine Bilder: Nach 0 Sekunden: Nach 1 Sekunde: |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab das auch mal getestet (ohne Delay). Hab zum Spaß mal ein 1024x1024 großes Bildchen genommen. Ergebniss: Steigerung von ca. 6.5 auf 13K, danach schwankend zwischen 6 und 13 (scheinbar weil der Taskmanager aus messen kann, wenn gerade Speicher freigegeben wird). Niemals über 13k (logisch müsste es übrigens in 7K Schritten steigen, wie beim ersten mal.
Fazit: Panikmache und nichtmal ne Urban Legend. ![]() |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group