2015-11-25 4 views
3

Я пытаюсь найти некоторые привязные петли в приложении Qt 4.8.4 (QtQuick 1.1) на работе. Я сделал несколько экспериментов и обнаружил следующие основные примеров результатов в привязке контура, обнаруженный в QML Analyzer QtCreator 3.5.1:Элемент ретранслятора в файле qml верхнего уровня вызывает цикл привязки в QtQuick 1.1 (QtCreator 3.5.1)

import QtQuick 1.1 

Rectangle { 
    Repeater { 
     model: 1000 
     Text { text: "I'm item " + index } 
    } 
} 

Если переместить элемент повторителя к другому файлу под названием QML Multiple.qml, который содержит :

import QtQuick 1.1 

Repeater { 
    model: 1000 
    Text { text: "I'm item " + index } 
} 

и изменить main.qml к следующему, связывающая цикл уходит:

import QtQuick 1.1 

Rectangle { 
    Multiple {} 
} 

1000 итераций не является реальным примером. Я использовал его для увеличения некоторых дельтах времени в QML Profiler. Проблема возникает с любым количеством итераций> = 1.

Вывод событий анализатора также утверждает, что «create» был вызван для верхнего main.qml 1001 раз (количество итераций повторителя + 1), однако анализ с массивом кажется, указывает на то, что использование памяти не увеличивается при обнаружении цикла привязки. Кажется, что он потребляет дополнительное время в зависимости от выхода анализатора. На моей машине main.qml create - 71 мс против 124 мс.

Я сделал несколько дальнейших экспериментов. Если я поместил элемент Repeater в другой файл QML и создам его с помощью Qt.creatComponent («MyComp.qml» и <component>.createObject() из основного qml-файла, я также получу цикл привязки. Если MyComp.qml использует Multiple {} вместо этого, привязка петля уходит

Я также попытался более позднюю версию Qt 5.5.0 -..? Тот же вопрос

это ожидаемое поведение Может быть ошибка в самой QtCreator я был поиск через QtCreator Jira и не удалось найти какие-либо связанные с этим проблемы.

ответ

1

Я не вижу причин, по которым цикл привязки создается с помощью простого кода, который вы указали. Если цикл привязки только что передан анализатором, а не действует Явный консольный вывод приложения, я подозреваю, что это ошибка в Analyzer в том, как он определяет привязки, а не в самом коде.