Win32 affichage graphique fuite mémoire

Résolu
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 - 20 juil. 2006 à 14:07
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 - 21 déc. 2006 à 21:50
Bonjour a tous,

j'ai fait une petite application affichant un graphique. Mais lorsque je le lance, le programme me bouffe toutes les ressources sous win98 alors que sous xp, la mémoire est parfaitement gérée.
Je fais un affichage toutes les 50 ms. J'utilise les primitives suivantes :
TextOut,Rectangle, MoveToEx,LineTo.

Pourquoi cela marche-t-il nikel sous XP et pas sous win98 ????

12 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
21 juil. 2006 à 09:57
Le problème vient du fait que la partie kernel de chaque processus est partagée par tous les processus et que toute intervention sur les objets kernel est très lente.
La disparition de ces antiquités ne sera regrettée par personne.

ciao...
BruNews, MVP VC++
3
vinc1008881 Messages postés 257 Date d'inscription dimanche 22 août 2004 Statut Membre Dernière intervention 29 septembre 2010 3
20 juil. 2006 à 14:13
Je sais pas c'est dur à dire mais comme cela marche sur XP ton code semble etre ok, donc c'est peut être un bug de window$ 98, ou un probleme de compatibilité (fonction de windows 98 != fonction de XP ???)
0
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
20 juil. 2006 à 14:21
ouais, c'est ce que je pensais. Je pensais aussi au fait le Win98 ne supporte peut-être pas les timers à 50ms. Je suis en train de tester avec un timer d'affichage à 1000 ms. Mais en 10 minutes, j'ai perdu 12% de RAM (250 MO au total).
Là, sous XP, sa fait 20 minutes qu'il tourne avec un affichage toutes les 50 ms, et pas un pet' de mémoire perdu (processus à 1300 KO).

C'est très bizarre...
0
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
20 juil. 2006 à 14:37
peux etre que ces fonctions ne se desalloue pas complement avec 98 je sais pas ca fais longtemps car il arrive souvent que des processus prenne du temps avant de vraiment avoir perdu toute la memoire car j'utilise ces fonctions sous xp et meme apres une heure apres une actualisation du processus j'ai 0 de fuite de memoire est tu sur de bien detruires tes objects car il me semble quela compatibilite est ok
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
20 juil. 2006 à 14:56
Le problème ne vient pas de la gestion de mes objets, puisuqe le même programme sous XP ne fait pas de fuites mémoires alors que sous 98 oui.

Peut-être faut-il gérer l'affichage graphique d'une manière différente sous 98.
Brunews pourrait peut-être le savoir sa...
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
20 juil. 2006 à 15:28
Ou ptet que XP corrige certaines erreurs de ton prog ce que ne fait pas 98.
0
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
20 juil. 2006 à 15:44
Je viens de tester un programme d'affichage d'une montre avec le double buffering (cppfrance_source_11153) et sous 98, meme pb, au bout de quelques minutes (voire secondes), la mémoire était saturée. L'affichage ne se faisait plus correctement. Je pense que ça vient du système lui-même.
Il doit y avoir des fonctions particulières à utiliser sous 98.
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 juil. 2006 à 15:50
En effet, c'est fort probable que XP gère mieu la mémoire et les process que 98 et empêche la saturation. Il ce peut aussi que ce soi la GDI de 98 qui ai un problème de compatibilité.

C++ (@++)
___________________________________________
Venez débattre de sujets touchant à la programmation ici
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 juil. 2006 à 15:54
Ah autre chose. Utilise tu VC2005? Si oui, tu a une option qui te permet de rendre ton programme "compatible" avec 98. Je l'ai jamais essayé cependant. C'est dans les propriété de ton projet->linker->optimisation.

C++ (@++)
___________________________________________
Venez débattre de sujets touchant à la programmation ici
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 juil. 2006 à 16:28
Tu as testé sur Win 3.xxx ???
Allons soyons sérieux, il ne faut absolument plus perdre une seconde à chercher une compatibilité avec des systèmes totalement obsolètes, tout ce qui est < Win2K doit être abandonné.

ciao...
BruNews, MVP VC++
0
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
21 juil. 2006 à 08:20
Je viens de comprendre. En fait, les fonctions SelectObject et DeleteObject sont très mal gérées sous 98. Je créais mes HPEN à chaque affichage. Mais en ne le faisant qu'une seule fois au début du programme, il n'y a plus de fuite mémoire.
0
s@ldon Messages postés 140 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 30 septembre 2009 3
21 déc. 2006 à 21:50
Ouais, ça c'est sûr. Bref, merci à tous, j'ai résolu mon problème, même si ce dernier ne venait pas de moi.
Effectivement, un vieux Windows ne sera regretté par personne, mais le nouveau fait déjà parler beaucoup de lui ici.
Une nouveauté déjà bien regrettée par certains...

Sur ce, j'ai un kernel 2.6.19 à tester !

Encore merci à tous ceux qui m'ont répondu !!!
0
Rejoignez-nous