我們知道,應用程序中瀏覽器控件的第一個實例的創建過程比其他的實例創建過程慢得多。爲了加速瀏覽器控件的創建,在應用程序的開始,可以創建一個隱藏的瀏覽器對象,使得應用程序中隨時都至少有一個瀏覽器控件的實例
在主窗口類中聲明 CComPtr<IOleObject> m_spOleObjectPreloadBrowser;
在主窗口類的初始化函數中
HRESULT hr = CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC,
IID_IOleObject, (void**)&m_spOleObjectPreloadBrowser);
if (FAILED(hr)){
TRACE(_T("Can not create WebBrowser/r/n"));
return FALSE;
}
CComQIPtr<IWebBrowser2> pWebBrowser(m_spOleObjectPreloadBrowser);
if(pWebBrowser){
CComBSTR bstrURL = _T("about:blank");
COleSafeArray vPostData;
pWebBrowser->Navigate(bstrURL,
COleVariant((long) 0, VT_I4),
COleVariant(_T(""), VT_BSTR),
vPostData,
COleVariant(_T(""), VT_BSTR));
}
然後在退出時釋放
m_spOleObjectPreloadBrowser=NULL;
這樣可以大大加快程序中瀏覽器控件的創建速度。因爲IE的動態庫都是共享的,所以除了第一個示例之外,多開一個實例多佔用的內存並不大。
QQ的廣告窗口明顯就沒有用這個方法來加速……打開的時候慢得要死……