Marshaling, IWebBrowser2 - тормоза
От: Аноним  
Дата: 25.06.09 10:30
Оценка: :)
Доброго времени суток!
Я управляю IE, который встроен в окно, используя объект IWebBrowser2.
В главном потоке приложения я создаю дочерний, в котором создаётся окно с обработчиком событий, и в котором маршалируется IWebBrowser2:

static IStream * g_pIS;

IWebBrowser2 * pWB;

// getting pWB ...

CoMarshalInterThreadInterfaceInStream(__uuidof(IWebBrowser2), pWB, &g_pIS);


Т.е. указатель на IWebBrowser2 засовывается в stream. Через переменную g_pIS, уже в другом (главном) потоке, я безопасно получаю указатель на IWebBrowser2:

IWebBrowser2 * g_pWB;

CoGetInterfaceAndReleaseStream(g_pIS, __uuidof(IWebBrowser2), (LPVOID*)&g_pWB);

// working with g_pWB


И всё работает. Только медленно очень. Если раньше (а раньше было без маршаллинга — через очередь сообщений) процесс работы с элементам занимал 10 сек., то сейчас он занимает 70 сек. (процессорного времени). (в 7 раз больше!)
Насколько я понял, отжерает конструкция вида (при работе с элементами документа (кол-во объектов в документе может достигать 1000 шт.):

for( long i = 0; i < allLength; ++i ) {
    MSHTML::IHTMLElementPtr e = all->item( _variant_t( i ), vtMissing );
// ...


В чём же дело? Почему маршаллинг так всё тормозит?
marshaling iwebbrowser2
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.