多个IWebBrowser2未释放内存 我有一个大的C++项目,我在这里实现了一个WebBub控件(这个想法来自于.< /P>)

多个IWebBrowser2未释放内存 我有一个大的C++项目,我在这里实现了一个WebBub控件(这个想法来自于.< /P>),c++,memory-leaks,iwebbrowser2,C++,Memory Leaks,Iwebbrowser2,我用AddCustomObject注入了一些外部方法。问题是当我需要处理一个包含许多对象(tinymce、jquery ecc)的大页面(1.9KB)进行本地编辑时。。。每次打开页面,内存都在增加 我搜索过,谷歌搜索过,阅读过,联系过最初的开发者。。。没有 在close方法中,代码如下所示: if (ibrowser != 0) { IConnectionPointContainer *cpc = 0; ibrowser->QueryInterf

我用AddCustomObject注入了一些外部方法。问题是当我需要处理一个包含许多对象(tinymce、jquery ecc)的大页面(1.9KB)进行本地编辑时。。。每次打开页面,内存都在增加

我搜索过,谷歌搜索过,阅读过,联系过最初的开发者。。。没有

在close方法中,代码如下所示:

      if (ibrowser != 0) {
        IConnectionPointContainer *cpc = 0;
        ibrowser->QueryInterface(IID_IConnectionPointContainer, (void**)&cpc);

        if (cpc != 0) {
            IConnectionPoint *cp = 0;
            cpc->FindConnectionPoint(DIID_DWebBrowserEvents2, &cp);

            if (cp != 0) {
                cp->Unadvise(cookie);
                cp->Release();
            }

            cpc->Release();
        }

        IOleObject *iole = 0;
        ibrowser->QueryInterface(IID_IOleObject, (void**)&iole);

        /*ibrowser->Stop();
        ibrowser->ExecWB(OLECMDID_CLOSE, OLECMDEXECOPT_DONTPROMPTUSER, 0, 0);
        ibrowser->put_Visible(VARIANT_FALSE);*/
        UINT refCount = ibrowser->Release();
        ibrowser = 0;


        if (iole != 0) {
            iole->Close(OLECLOSE_NOSAVE);
            iole->Release();
        }
    }
在Vs2008中调试时,我看到许多CustomObject::AddRef和版本可能是由于setTimeout

我不知道如何解决这个问题。。。需要帮助

谢谢你


Andrea

Javascript代码泄漏DOM对象是一个长期存在的问题。现在很难让程序员注意到这一点,现代浏览器通过在单独的进程中呈现一个页面并丢弃整个进程来隐藏问题。当您使用进程内浏览器时,没有这种奢侈。除了放弃浏览器并创建一个新的之外,我看到的其他东西可能与问题无关,或者此代码段中缺少其他代码<代码>cp->Unadvise(cookie),但尚未调用
advice
,因此在该对象上没有有效的cookie可供取消建议。如果没有注册任何事件接收器,则可以删除所有连接点处理。实际上,这可能是一个bug,可能会泄漏内存。如果代码中的其他地方注册了连接点并调用了advise,并且填充了cookie,那么您可能希望对检索cookie的对象调用Unadvise。