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) :
Et je fini mon traitement avec :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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
Ce qui devrait d�salou� tout ce petit monde.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 lpBody->Release(); //delete(lpBody); } //delete(lpBodyElement); lpBodyElement->Release(); } doc2->Release();
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 :
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 :/
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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));
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
Partager