Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Как снизить использование памяти QQuickWidget'а

#qt5 #qml


Не пойму, почему так много расходится память для отображения qml файла. Вот скриншот:



Вот код:

C++

#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QQuickWidget widget;
    widget.setSource(QUrl::fromLocalFile("text.qml"));
    widget.setWindowFlag(Qt::FramelessWindowHint);
    widget.show();

    return a.exec();
}


text.qml:

import QtQuick 2.12
Item
{
    width: 150
    height: 200

    Rectangle
    {
        width: parent.width
        height: parent.height
        color: "#66ff99"
    }

}


Почему для отображения простого прямоугольника, нужно столько памяти?
    


Ответы

Ответ 1



Так же можно утсановить вот этот флаг, который снижает потребеление памяти в 5 раз. QQuickWindow::setSceneGraphBackend(QSGRendererInterface::Software); Беспонятие, что этот флаг значит, но работает он бесподобно.

Ответ 2



QML - наследник программного инструмента QtScript, который в свою очередь реализует полноценный JavaScript интерпритатор со своим Garbage Collector, глобальными объектами (например, XMLHttpRequest, который доступен как в js, так и qml), а так же механизмами прототипного наследования. То, что суммарно программа потребляет так много памяти это норма в 2019 году... Теоретически, можно обнулить какие-то части глобального объекта QML. В принципе, если вам не нужны HTTP запросы прямо с QML разметки. На практике - 100+ мегабайт это совершенно нормальное потребление памяти для приложения, которое взаимодействует с API целевой операционной системы через абстракцию. #include #include int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickView view; view.setSource(QUrl::fromLocalFile("application.qml")); view.show(); return app.exec(); } P.S. Если приложение использует только функциональность QML, возможно, применение класса QGuiApplication вместо QApplication поможет сэкономить память.

Комментариев нет:

Отправить комментарий