Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 性能:在包中导入对象更好还是单独导入更好? 让我说我有一组C++对象想暴露给QML。_Qt_Qml - Fatal编程技术网

Qt 性能:在包中导入对象更好还是单独导入更好? 让我说我有一组C++对象想暴露给QML。

Qt 性能:在包中导入对象更好还是单独导入更好? 让我说我有一组C++对象想暴露给QML。,qt,qml,Qt,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"); qmlRe

我可以想象这样做的两种方式:

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

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");
...
第二种方法所有对象的一条导入语句:

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");
...
显然,将包中的对象分组更简单(只要有意义)。性能不应该是你主要关心的问题


就性能而言,一种方法比另一种方法好吗?

我不是100%确定,但我想说的是,QML引擎在找到导入语句时会检查模块,因此,如果将所有类放在同一个模块中,它们将同时被找到,但如果将它们分开,则需要多个模块检查

因此,真正的答案是:

  • 如果你在应用程序中使用了大部分对象,请将它们放在同一个模块中,这样,通过一个模块检查,你就拥有了所有对象(对于不使用的对象,你的开销很小,但你节省了新模块内省的开销)

  • 如果您使用的项目很少,请将它们分开,以便“新模块开销”和“模块中未使用的对象”之间的比率更小


  • 免责声明:无论如何,我们不知道“新模块检查”开销的基准,也不知道“模块中未使用的对象”开销。

    我认为在决定如何组织模块时,性能不是主要考虑的问题。当然不是,这只是为了更好地理解引擎。
    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");
    ...
    
    import my.package 1.0 
    
    Object3 { 
        Object2 { ... } 
        Object1 { ... }
    }