Schreiben in Pixmap -> steigende Speicherbelastung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

DaysShadow

Betreff: Schreiben in Pixmap -> steigende Speicherbelastung

BeitragSo, Nov 29, 2009 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich arbeite momentan an einem kleinen Projekt, das mir allerdings jetzt schon einen Strich durch meine Rechnung machen will...
Ich muss, um bestimmte Gebiete eines Images farblich zu verändern, per LockImage auf die Pixmap des Images zugreifen, dann schreibe ich dort die neuen Farbwerte hinein....und die Speicherauslastung steigt stetig bei jedem schreiben.

Zur Veranschaulichung:

BlitzMax: [AUSKLAPPEN]
SuperStrict

SetGraphicsDriver GLMax2DDriver()

Graphics( 800, 600, 0, 60 )

SetBlend( ALPHABLEND )

Global image:TImage = CreateImage( 800, 600 )

Global pixmap:TPixmap = LockImage( image )

pixmap.ClearPixels( $FF000000 )

UnlockImage( image )


Repeat

Cls

DrawImage( image, 0, 0 )

If KeyHit( KEY_F1 ) ColorImage( $FF808080 )

If KeyHit( KEY_F2 ) ColorImage( $FF606060 )

Flip

Until KeyHit(KEY_ESCAPE) Or AppTerminate()

Function ColorImage:Int( color:Int )

pixmap = LockImage( image )

For Local y:Int = 0 To 200

For Local x:Int = 0 To 200

pixmap.WritePixel(x, y, color)

Next

Next

pixmap = Null

UnlockImage( image )

End Function


Die Sache ist jetzt, dass ich nicht weiß ob das einerseits normal ist dass der Speicherverbrauch so ansteigt und andererseits wie ich es (anders) lösen kann.

Ich wäre dankbar für gedankliche Anstöße Wink
MfG DaysShadow
Blessed is the mind too small for doubt

Holzchopf

Meisterpacker

BeitragSo, Nov 29, 2009 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin mir nicht ganz sicher, aber ich glaube, sehr hoher Speicherverbrauch (ich bin immer noch der Meinung, dass man dieses Verhalten optimieren könnte), ist ein BMax-Feature =/ Ich habe zwar dein Problem selber noch nie untersucht (mein Wassertexturgenerator zeigt was ähnliches, bin dem aber noch nie auf den Grund gegangen), aber ich könnte mir schon vorstellen, dass das halt einfach so sein muss.

Ich will dich ja nicht enttäuschen, aber an deiner Stelle würde ich mir keine Hoffnungen machen, da noch viel reissen zu können...

Wenn jemand was anderes beweisen kann, wäre ich natürlich auch sehr froh drum Wink Irgendwelche Experten hier? *indierundeguck*
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

Noobody

BeitragSo, Nov 29, 2009 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Nachdem ich in der Hauptschleife jeweils ein GCCollect() angehängt habe, bleibt der Speicherverbrauch (zumindest bei mir) konstant BlitzMax: [AUSKLAPPEN]
If KeyHit( KEY_F1 ) ColorImage( $FF808080 ); GCCollect()

If KeyHit( KEY_F2 ) ColorImage( $FF606060 ); GCCollect()
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

DaysShadow

BeitragSo, Nov 29, 2009 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Jawoll, mit GCCollect steigt der Verbrauch nur beim ersten Mal, danach bleibt es konstant.
Demnach würde also der Verbrauch irgendwann mal sinken wenn der GC an der Stelle aufräumt oder würde es gar nicht automatisch passieren?

Vielen Dank schonmal! Smile

MfG DaysShadow
Blessed is the mind too small for doubt
 

Dreamora

BeitragSo, Nov 29, 2009 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch eigentlich sollte es automatisch passieren.

Das ist übrigens standardverhalten für managed environments, dass soviel RAM behalten wird wie im peak benötigt wurde.

Sie geben erst dann ram frei, wenn er knapp wird, weil es einfach verschwendete zeit ist den RAM dem OS zurück zu geben nur um ihn kurze zeit später wieder anzufordern, zumal RAM Anforderungen recht zeitintensiv sind speziell wenn man sie ständig wieder macht.

gibt auch keinen grund etwas anderes zu machen, warum denn auch, wenn RAM da ist kann man ihn auch nutzen Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group