Image verbraucht trotz FreeImage RAM

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

TheMatrix

Betreff: Image verbraucht trotz FreeImage RAM

BeitragMo, Okt 02, 2006 11:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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 !!!

BeitragMo, Okt 02, 2006 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab dein Prg. grad mit Delay 60 getestet, und es erhöht sich kein Speicher.
antome

TheMatrix

BeitragMo, Okt 02, 2006 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst den Speicher beim Taskmanager 'Prozesse' --> blitzcc.exe betrachten. Der Speicher erhöht sich stetig um ein paar bytes.
°_° °.° °~° °v° .. -.-
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 12:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Sagt ja auch keiner Razz .

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 Wink
°_° °.° °~° °v° .. -.-
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Crying or Very sad
  • Zuletzt bearbeitet von TheMatrix am Mo, Okt 02, 2006 13:20, insgesamt einmal bearbeitet
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hehe, sicherlich nicht. Ich hab ein 3GHZ Rechner und meine HDD hat 7200rpm Wink

Und ich weiß auch das 250MS 1/4 Sekunden sind und 900Ms 8/9 Sekunden Wink

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 !!!

BeitragMo, Okt 02, 2006 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Okt 02, 2006 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

TheMatrix

BeitragMo, Okt 02, 2006 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja 8/9 sind ja ungefähr 9^^ (0,8 Periode

Razz )

@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 Wink

@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 Crying or Very sad
°_° °.° °~° °v° .. -.-
 

antome

!!! gesperrt !!!

BeitragMo, Okt 02, 2006 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe deine Frechheiten satt such dir einen anderen Deppen den du ständig beleidigen kannst.
antome

Holzchopf

Meisterpacker

BeitragMo, Okt 02, 2006 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs auch kurz (nagut, ca 5min) getestet. Speicherauslastung bleibt konstant.

It's your turn Wink
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

TheMatrix

BeitragMo, Okt 02, 2006 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@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:
user posted image
Nach 1 Sekunde:
user posted image

D2006

Administrator

BeitragMo, Okt 02, 2006 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group