Dramatically optimise inserting many items in wxGenericListCtrl.

During each item insertion SetItem() was called and this resulted in a call to
GetItemRect() which, in turn, re-laid out all items in the control meaning
that the relatively expensive wxListMainWindow::RecalculatePositions() was
called N times when inserting N items.

Reduce this to just a single call by not refreshing the item in SetItem() if
everything is going to be redrawn soon anyhow.

This decreases the time needed to insert a couple of thousands of items in
icon view from several minutes to less than a second.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70087 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2011-12-22 14:47:54 +00:00
parent 4ffdb64018
commit b25278d885

View File

@ -3181,10 +3181,14 @@ void wxListMainWindow::SetItem( wxListItem &item )
}
}
// update the item on screen
wxRect rectItem;
GetItemRect(id, rectItem);
RefreshRect(rectItem);
// update the item on screen unless we're going to update everything soon
// anyhow
if ( !m_dirty )
{
wxRect rectItem;
GetItemRect(id, rectItem);
RefreshRect(rectItem);
}
}
void wxListMainWindow::SetItemStateAll(long state, long stateMask)