Erreur : mémoire insuffisante

Résolu
Signaler
Messages postés
76
Date d'inscription
samedi 28 janvier 2006
Statut
Membre
Dernière intervention
22 janvier 2009
-
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
-
Bonjour tout le monde,

je suis actuellement confronté à une erreur que je trouve incompréhensible. Tout d'abord voilà le contexte : j'essai de créer un Tetris en VB (.NET) à l'aide d'une source sur ce site même (Netris).

Tout d'abord je créé un bitmap de fond, qui représentera l'état de mon jeu à chaque moment. Puis après je créé un objet block d'une classe personnalisée piece. Puis je lui applique la méthode "voir" correspondante à la classe "piece" :

Public Sub Voir(ByRef BitM As Bitmap)
    _Carre1.Voir(BitM)
    _Carre2.Voir(BitM)
    _Carre3.Voir(BitM)
    _Carre4.Voir(BitM)
End Sub, ----
(Coloration syntaxique automatique par Kenji)

Je précise que _Carre1, _Carre2, _Carre3, _Carre4 sont des objets créés lors de la création de mon objet block, et de classe "carre"

Voilà le code de la méthode voir relative à ma classe carre :

;   Public Sub Voir(ByRef BitM As Bitmap)
        Dim graph As Graphics = Graphics.FromImage(BitM)
        Dim graphPath As New GraphicsPath
        Dim brush As PathGradientBrush
        Dim surroundColor As Color()
        Dim rect As Rectangle

        rect = New Rectangle(Me.position.X, Me.position.Y, Me.Taille, Me.Taille)
        graphPath.AddRectangle(rect)

        brush = New PathGradientBrush(graphPath)
        brush.CenterColor = Me.CouleurDessus

        surroundColor = New Color() {Me.CouleurFond}

        brush.SurroundColors = surroundColor

        graph.FillPath(brush, graphPath)
    End Sub, ----
(Coloration syntaxique automatique par Kenji)

Le probleme est que quand je lance mon application, un message d'erreur apparait sur la ligne "        brush = New PathGradientBrush(graphPath)" et me dit que la mémoire est insuffisante. Mais quand je lance l'appli téléchargée (utilisant les mêmes méthodes), cela fonctionne

Quelqu'un pourrait-il me dire d'où cela provient, car ça me bloque dans mon projet

Merci pour votre aide
Cordialement
Kevin PERRIAT

3 réponses

Messages postés
76
Date d'inscription
samedi 28 janvier 2006
Statut
Membre
Dernière intervention
22 janvier 2009

Tout d'abord merci pour ta réponse

Ayant pris mon courage à deux mains, je me suis tappé un débugage pas à pas et j'ai trouvé le bug (stupide comme à chaque fois) : j'avais oublié de préciser la valeur de mon Me.Taille lol

Merci tout de même pour ton aide
Cordialement
Kevin PERRIAT
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

Je ne connais pas VB.Net,

Je dirais simplement que si ta sub voir est appelée plusieurs fois, tu crées autant de fois des Rect et Brush, sans (je ne le vois nulle part dans ton code) les détruire et ainsi relibérer de la mémoire!
Messages postés
918
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
27 octobre 2008
10
jmfmarques < Pour info, VB.NET dispose d'un garbage collector, parait-il assez efficace, mais encore eu l'occasion de le stresser un peu pour juger par moi-même