性能:在包中或单独导入对象是否更好?

时间:2017-03-16 10:03:13

标签: qt qml

我们说我有一堆c ++对象要暴露给Qml。

我可以想象两种方式:

第一种方法,每个对象的一个​​导入语句

qmlRegisterType<Object1>("my.package.object1", 1, 0, "Object1");
qmlRegisterType<Object2>("my.package.object2", 1, 0, "Object2");
qmlRegisterType<Object3>("my.package.object3", 1, 0, "Object3");
qmlRegisterType<Object4>("my.package.object4", 1, 0, "Object4");
...

然后在Qml中我们导入每个Component中需要的东西

import my.package.object2 1.0 
import my.package.object3 1.0

Object2 { Object3 { } }

第二种方法所有对象的一个​​导入语句:

qmlRegisterType<Object1>("my.package", 1, 0, "Object1");
qmlRegisterType<Object2>("my.package", 1, 0, "Object2");
qmlRegisterType<Object3>("my.package", 1, 0, "Object3");
qmlRegisterType<Object4>("my.package", 1, 0, "Object4");
...

然后在Qml中,我们导入每个需要至少其中一个的组件中的所有对象

import my.package 1.0 

Object3 { 
    Object2 { ... } 
    Object1 { ... }
}

显然,将包中的对象分组更简单(只要有意义)。性能不应成为您的主要关注点。

在绩效方面比另一方好一点?

1 个答案:

答案 0 :(得分:2)

我不是100%肯定,但我会说QML引擎在找到导入语句时检查模块,所以如果你把所有类放在相同的模块中,它们将同时被找到,但如果你分开他们需要进行几次模块检查。

所以真正的答案是:

  1. 如果您在应用程序中使用大部分对象,请将它们放在同一个模块中,这样只需一个模块检查即可拥有所有这些对象(对于不使用的对象,您的开销很小) ,但是你节省了新模块内省的开销。)

  2. 如果您使用的项目很少,请将它们分开,以便在新模块开销与#34;之间取得比例。和&#34;未使用的对象在模块&#34;

  3. 免责声明:无论如何,我们不知道&#34;新模块检查&#34;的基准。开销,模块中的&#34;未使用的对象&#34;开销。