Memoire Insuffisante VB6

Signaler
Messages postés
2
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
9 juin 2005
-
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
-
J'ai régulièrement dans mon application le Message "Mémoire Insuffisante"; alors qu'il reste environ 300 Mo.
Apres analyse toutes les Dll, sont déchargées correctement alors que les ocx restent chargés.
D'ou peut venir ce message ?
Ai-je un moyen de décharger les ocx?

Merci de votre aide

3 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Ca dépend beaucoup de ton code !



Des objets qui restent en mémoire à cause de liaisons circulaires entre
eux, des objets de la GDI qui restent en mémoire après les avoir
utiliser, la création automatique d'instances d'objet que tu ne
décharge pas, etc.



Cela s'appelle une fuite mémoire, et le meilleur moyen de savoir d'où
ca peut venir, c'est d'espionner la mémoire qu'occupe ton prog, et
regarder si elle grandit après telle ou telle opération.


Une règle d'or en programmation : tout ce que tu crée en mémoire doit
être libéré dès que tu n'en a plus besoin (cela est valable pour les
instances de classes, les objets de la GDI comme les crayons, les
pinceaux, etc.).


DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/
Messages postés
2
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
9 juin 2005

Actarus
Mon code désalloue correctement les Dll, mais je ne connais pas le moyen de désalouer les Ocx, tu sais comment on fait ?
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Ton problème ne vient sûrement pas des dll ou ocx : une fois chargés,
ils partagent l'espace mémoire et puis c'est tout, ce n'est pas eux qui
provoquent des fuites mémoires.



Non, il faut surtout regarder qu'à chaque Load(NomDeObjet), il y a un
Unload(NomDeObjet), qu'à chaque CreatePen, il y a un DeleteObject, etc.



C'est ce genre de création d'instance qui peuvent provoquer ce type
d'erreur : si tu crée des instances à tout va sans les détruire une
fois que tu n'en a plus besoin, la mémoire arrive à saturation !

DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) : www.ProgOtoP.com/popapi/