Я использую графический API Qt для отображения слоев в некоторых программах ГИС.
Каждый слой - это группа, содержащая графические примитивы.У меня проблема с производительностью при загрузке довольно больших наборов данных, например, это происходит при создании группы, состоящей из ~ 96k круговых путей (точек из шейп-файла):
изображение callgrind http://f.imagehost.org/0750/profile-createItemGroup.png
Полный дамп callgrind равен здесь .
Вызов QGraphicsScene::createItemGroup()
завершается на моем 2,4 ГГц core2, и кажется, что все это время используется в QGraphicsItemPrivate::updateEffectiveOpacity()
, который сам потребляет 37% своего времени, вызывая QGraphicsItem::flags()
4 млрд раз (данные поступают из тестового сценария без графического интерфейса, просто сцена, даже не привязанная к представлению).
Все остальное происходит практически мгновенно (создание элементов, чтение файла и т. Д.).Я пытался отключить индекс сцены перед созданием группы и получил похожие результаты.
Что я могу сделать, чтобы улучшить производительность в этом случае?Если я не могу, есть ли способ создавать группы быстрее?