Win32 affichage graphique fuite mémoire [Résolu]

Signaler
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
-
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
257
Date d'inscription
dimanche 22 août 2004
Statut
Membre
Dernière intervention
29 septembre 2010
3
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 ???)
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
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...
Messages postés
338
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
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...
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ou ptet que XP corrige certaines erreurs de ton prog ce que ne fait pas 98.
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
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.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
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++
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
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.
Messages postés
140
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
30 septembre 2009
2
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 !!!