Sümptomid
Kujutage ette järgmist stsenaariumi.
-
Teil tekivad web browser kontrolli põhirakendus või ActiveX-juhtelementi.
-
Taotluse või ActiveX-juhtelemendi viited loendur objekti kogumine Interface HTML-lehele. Selle funktsiooni loomiseks vt järgmisi suuniseid:
-
C++, saadakse loendur kogumise liidesget__newEnum funktsiooni. Näiteks kogumise liides on IHTMLElementCollectionjaja see on tavaliselt saadud helistades IHTMLDocument2::get_all.
-
Visual Basicu selles etapis toimub foreach tarindit taustal üle kogumik (nt document.all kogumine).
-
-
Rakenduse käivitada arvutis, kuhu on installitud Internet Explorer 10.
Selle stsenaariumi korral ilmneb mäluleke.
Märkus. Kuna ActiveX-juhtelemendid tarbida rohkem mälu kui native HTML elemendid, mälu leke on selge, kui elementi kogumine on ActiveX-juhtelement.
Näiteks mälulekke ilmneb C++ koodi kasutamisel funktsiooni web browser kontrolli põhirakendus. Selles olukorras on suurel hulgal mälu lekkinud kui üks elemente veebilehel on ActiveX-juhtelement.
void CEnumLeakDlg::OnBnClicked(){
IDispatch* pDocDisp = m_web.get_Document();
IHTMLDocument2* pDoc = NULL;
HRESULT hr = pDocDisp->QueryInterface(IID_IHTMLDocument2, (void**)&pDoc);
IHTMLElementCollection* pElColl = NULL;
hr = pDoc->get_all(&pElColl);
IUnknown* pEnum = NULL;
hr = pElColl->get__newEnum(&pEnum);
pEnum->Release();
pElColl->Release();
pDoc->Release();
pDocDisp->Release();
}
Lahendus
Selle probleemi lahendamiseks installige järgmine värskendus:
2862772 MS13-059: Internet Exploreri seniste koondturvavärskenduste: 13 August 2013
Lisateabe saamiseks
Tarkvaravärskenduste terminoloogia kohta lisateabe saamiseks avage Microsofti teabebaasi (Knowledge Base) artikkel, klõpsates järgmist artiklinumbrit:
824684 Microsofti tarkvaravärskenduste iseloomustamiseks kasutatavate standardterminite kirjeldus