begin process at 2010 02 10 06:31:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Multimédia

 > 

Autre

 > 

Fuite mémoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fuite mémoire

vendredi 31 août 2007 à 17:29:49 | Fuite mémoire

le5ejumeau

Bonjour à tous,

J'ai codé un petit bout de code qui dessine à l'ecran un rectangle et le fait bouger. le probleme c'est que la mémoire aloué à mon application ne fait qu'augmenter et je n'arrive pas à resoudre le probleme. pouvez vous m'aider?

voila le petit bout de code :
pctJeux etant une picturebox
        private BufferedGraphics o_buffer;
        private Int32 i_X  = 0; 
        private Int32 i_Y  = 400;
        private Thread o_jeu;

        public Form1()
        {
            InitializeComponent();
            o_buffer = BufferedGraphicsManager.Current.Allocate(pctJeux.CreateGraphics(), pctJeux.DisplayRectangle);
            o_buffer.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

            o_jeu = new Thread(new ThreadStart(Jouer));
            o_jeu.Priority = ThreadPriority.Normal;
            o_jeu.Start();
        }

     
        private void Jouer()
        {
            Graphics g = null;
            while(Thread.CurrentThread.IsAlive){
                g = o_buffer.Graphics;
                g.Clear(Color.Black);
                g.DrawRectangle(new Pen(Brushes.Red, 10), i_X, i_Y, 100, 10);
                o_buffer.Render();
            }
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyData  == Keys.Right)
                i_X += 10;
            else if (e.KeyData == Keys.Left)
                i_X -= 10;

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            o_jeu.Abort();
            o_buffer.Dispose();
        }
merci de voter aide 
vendredi 31 août 2007 à 23:44:05 | Re : Fuite mémoire

coq

Administrateur CodeS-SourceS
Réponse acceptée !

Salut,

Ce n'est pas nécessairement une fuite, suivant la configuration de la machine utilisée pour les tests, le GC n'a pas forcément besoin de perdre du temps à libérer "instantanement" ce qui est libérable.

Sinon :
g.DrawRectangle(new Pen(Brushes.Red, 10), i_X, i_Y, 100, 10);
Quel est l'intérêt de recréer le même stylo à chaque fois ?

Autres questions :
- as tu vraiment besoin d'enchainer les dessins à cette fréquence là ?
- as tu vraiment besoin d'utiliser un contrôle PictureBox (censé afficher une image) comme surface de dessin ?

/*
coq
MVP Visual C#
CoqBlog
*/

samedi 1 septembre 2007 à 11:13:58 | Re : Fuite mémoire

le5ejumeau

Merci coq pour cette réponse.  C'est vrai j'avais pas pensé à cà. le GC ne va pas libérer de la mémoire si cela n'est pas nécessaire.

effectivement, je n'ai pas besoin de recréer mon stylo à chaque fois.
 
Par contre pour l'anchainement des images,  l'idée c'était de faire un casse-brique et de faire un processus avec une boucle qui s'occupe de faire bouger la balle.

Par contre pour l'utilisation d'un picture box je sais pas, c'etait pour moi le plus logique. C'est mieux de dessiner directement sur la form ?

merci
 

samedi 1 septembre 2007 à 12:58:50 | Re : Fuite mémoire

coq

Administrateur CodeS-SourceS
Ba si le picturebox n'affiche rien oui, consommer des ressources pour dessiner sur une surface vierge n'a pas réellement de sens.
Par contre tu utilises GDI+ pour faire un jeu, n'aurais tu pas intérêt à regarder du côté de DirectX / XNA ? (à moins que GDI+ soit requis)

Ma remarque sur le rafraichissement portait sur le fait que dès que tu as fini de faire le rendu tu recomences directement, alors qu'au final l'oeil humain ne pourra pas toutes les voir.


/*
coq
MVP Visual C#
CoqBlog
*/
samedi 1 septembre 2007 à 16:40:04 | Re : Fuite mémoire

le5ejumeau

D'accord je comprend, afficher plus de 50 images par secondes sa sert pas à grand chose. Je vais me pencher sur XNA je connais pas donc ca va pas me faire de mal d'apprendre à programmer pour la xbox. ...

Merci de tes conseils



Cette discussion est classée dans : buffer, private, jeu, mémoire, pctjeux


Répondre à ce message

Sujets en rapport avec ce message

Accès à la mémoire d'un processus [ par Hybris95 ] Je suis en train de développer un logiciel du style add-on pour jeu, ce logiciel devra pouvoir :-accéder à la mémoire du jeu en question (probablement mémoire protégée [ par imene_t1 ] Bonsoir à tous ,   Voila j'ai utilisé les dll de matlab dans c# mais à l'execution on m'affiche une erreur : mémoire protégée en lecture et ecriture , Probleme de Serialisation d'un usercontrol [ par tkd1984 ] Bonjour a tous le monde j'aimerais serialiser un usercontrol qui porte le nom "Table",voici les propriétés de la classe qui le représente: //nom pour convertir texte en BMP en mémoire [ par DIMUSERS ] Bonjour à tous,Voici mon problème : Je souhaiterai convertir une chaîne de caractères formatée (exemple avec un soulignement et en italique) en un Bit Jeu en réseau [ par Florentcrochet ] Bonjour , j'aimerais réussir a utiliser les sockets dans le contexte d'un jeu.Le but du jeu serai de découvrir un nombre compris entre 0 et 100 en pre dessiner un rectangle de selection sur un panel [ par vboussema ] salutj'aime dessiner sur une forme qui contient un panel qui contient une picturebox un rectangle de selection de telle sorte que le rectangle ne pare Pions sur un plateau de jeu [ par Jordan59 ] Bonjour à tous,Je suis en train de réaliser un monopoly. J'ai donc mis une PictureBox avec le Plateau de jeu et je souhaite y placer mes pions ronds.J A propos de backgroundWorker [ par sliverman ] Bonjour à tous, alors voila j'essaye de faire des exemple de code pour comprendre le composant backgroundWorker.Donc j'ai un ListView, un progressbar recherche d'une chaine dans une autre [ par olibara ] BonjourJe me perds a nouveau dans la doc de csharp que je trouve embrouillée Je cherche la maniere simple de chercher si une chaine est contenue dans Operation interThread non valide : utilisation des delegates [ par Zaltez ] Bonsoir,J'aurai besoin d'un précision sur l'utilisation des delegates en c#.j'utilise les delegates pour rafraichir l'avancement du progressbar de cet


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales