:salut:
Je m'intéresse actuellement au performance de QML en termes de temps d'exécution d'une fonction.
J'ai pris comme exemple le calcul du plus grand diviseur commun entre deux nombres.
Voici mon code QML :
le code cpp me permettant d'exécuter le code QML:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import QtQuick 2.0 Item { function myTest(){ function pgcd(a, b){ return b ? pgcd(b, a % b) : a } for (var i=0; i<=10000000; i=i+1){ pgcd(9078, 5118) } console.log("Fin du test i = ", i) return 0 } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #include <QApplication> #include <QQmlEngine> #include <QQmlComponent> #include <QQuickView> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QQmlEngine engine; QQmlComponent component(&engine, QUrl("ex.qml")); QObject *object = component.create(); QMetaObject::invokeMethod(object, "myTest", Qt::DirectConnection); delete object; }
et sa variante en Python :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import sys from PyQt5.QtCore import QCoreApplication, QUrl, QMetaObject, Qt from PyQt5.QtQml import QQmlComponent, QQmlEngine def fonction(): app = QCoreApplication(sys.argv) engine = QQmlEngine() component = QQmlComponent(engine) component.loadUrl(QUrl('ex.qml')) test = component.create() QMetaObject.invokeMethod(test, "myTest", Qt.DirectConnection) del engine fonction()
Je ne suis clairement pas un expert en C++ mais je suis assez étonné du résultat que j'obtiens à savoir :
- code QML appelé via Python : environ 1.5sec ;
- code QML appelé via C++ : environ 6.8sec ;
Ai-je mal fait quelque chose ? Quelqu'un pourrait-il me dire s'il obtient les mêmes résultats en particulier avec la version C++ ?
D'avance merci
++
J