Fuite mémoire et désapointement
Bonjour.
J'ai un problème de fuite mémoire dans un code sous VC++6.
J'utilise un controle CWebBrowser, et a chaque fois que la fenetre est rafraichie (apres le rafraichissement pour etre precis) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
lpDispatch = m_browser.GetDocument(); // m_browser est mon CWebBrowser2
IHTMLDocument2 *doc2 = NULL;
lpDispatch->QueryInterface(IID_IHTMLDocument2,(void**)&doc2);
if ( doc2 == 0 )
return;
IHTMLElement *lpBodyElement;
IHTMLBodyElement *lpBody;
IHTMLTxtRange *lpText;
doc2->get_body(&lpBodyElement);
if ( lpBodyElement )
{
lpBodyElement->QueryInterface(IID_IHTMLBodyElement,(void**)&lpBody);
if ( lpBody )
{
lpBody->createTextRange(&lpText);
BSTR bstrText;
lpText->get_htmlText(&bstrText);
// mon traitement |
Et je fini mon traitement avec :
Code:
1 2 3 4 5 6 7 8 9
|
lpBody->Release();
//delete(lpBody);
}
//delete(lpBodyElement);
lpBodyElement->Release();
}
doc2->Release(); |
Ce qui devrait désaloué tout ce petit monde.
Pourtant, a chaque refresh de ma page web dans mon CWebBrowser, mon processus se prend entre 300 et 500k dans la figure... au bout de quelque heures d'utiilisation, mon processus pèse près de 70Mo alors qu'il en pesait 16 au lancement.
Compte tenu de la taille qu'il prend a chaque refresh, je suis persuadé que c'est le contenu HTML de la page web qui est chargée en mémoire qui n'est pas désaloué.
J'ai donc essayé des free() et des delete(), mais le résultat reste le même.
Etant expert en PHP, mais pas du tout en C, j'aurais vraiment besoin qu'on m'explique ce qui ne vas pas...
J'ai également essayé de faire :
Code:
1 2 3 4 5 6
|
// CString i2a(int); // converti un int en Cstring
MessageBox(i2a((int)doc2));
doc2->Release();
free(doc2);
MessageBox(i2a((int)doc2)); |
Pourtant, les 2 MessageBox m'affichent le même résultat... docs ne devrait-il pas etre égale à NULL apres le free ? même chose avec delete :/
Quelqu'un comprend t-il pourquoi ça fait ça.
Merci d'avance.
edit : il n'y a bien entendu pas de return dans le code
edit2 : j'ai coupé mon code trop tot pour voir le delete sur lpText, mais je l'avais testé aussi