Re[4]: Утечка GDI объектов в htmlayout.
От: Аноним  
Дата: 04.05.10 09:25
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Что такое "Данные из дампа:"?


Наша дампилка, которая позволяет расшифровать GDI объекты на манер WinDBG.
Могу выслать полный дамп WinDBG.

CS>Какая версия htmlayout?


Мы используем HTMLayout 3.3.1.43. На версии 3.3.2.1 ситуация аналогичная.

CS>В любом случае:


CS>Запускаем browse.exe, грузим в него тестовый документ.

CS>Запускаем Process Explorer, открываем tab Properties / Performance на browse.exe.
CS>И жмем F5 в browse.exe — документ перегружается. Наблюдаем GDI handles counter.
CS>Если при этом ты наблюдаешь рост GDI handles counter, то я хотел бы увидеть тот документ что ты загрузил.

Мы используем MFC, поэтому я взял mfc_browse.exe.
В документе прописаны виджеты, которые mfc_browse никак не обрабатывает, поэтому я немного изменил код:

int CLayoutView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
  ...

  m_pStatic = new CStatic();
  m_pStatic->Create( _T( "" ),
                     WS_CHILD | WS_VISIBLE | WS_BORDER,
                     CRect( 0, 0, 0, 0 ),
                     this );
  
  return 0;
}

LRESULT CLayoutView::OnCreateControl( LPNMHL_CREATE_CONTROL nm)
{ 
  if ( nm && m_pStatic )
  {
    nm->outControlHwnd = m_pStatic->m_hWnd;
  }

  return 0;
}

LRESULT CLayoutView::OnDestroyControl( LPNMHL_DESTROY_CONTROL nm)
{ 
  if ( nm )
  {
    nm->inoutControlHwnd = NULL;
  }

  return 0;
}



При каждом открытии утекает 1 GDI объект (по количеству виджетов). Если загрузить документ несколько раз через mfc_browse без виджетов, утечки нет.

HTML документа:


<html>
  <custom>
      <Cells>
        <Cell Number="0" ID="{8FD23C81-23A0-4F9B-8A48-AF5F10E57B55}"/>
    </Cells>
  </custom>
  <head>
    <title></title>
        <style>
            body { margin: 0px; padding: 0px }
            table#layout { width:100%; height:100%; padding: 3px; margin: 0px; background-color: #000000; background-image:url(res:"IDB_BACKGROUND"); background-repeat:repeat }
            table#layout > tr > td { overflow-x: hidden; border: 0px solid white; padding: 3px; margin: 0px; vertical-align: top; }
            table#layout > tr > td:nth-child(1) { width: 100%; height: 100%; padding: 1px; }
        </style>
  </head>
<body>
    <table #layout>
        <tr>
            <td>
                <widget type="videownd" style="height:100%; width:100%" id="{8FD23C81-23A0-4F9B-8A48-AF5F10E57B55}"/>
            </td>
        </tr>
    </table>
</body>
</html>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.