单个 QML Q_PROPERTY QString 每 90 毫秒消耗高 CPU (85%)
single QML Q_PROPERTY QString consumes high CPU (85%) emitting every 90ms
我正在开发一个 QML 应用程序,它在我发出时消耗了大约 85% 的 CPU
每 90 毫秒向 QML 显示一个 QString。我们目前正在使用 Qt 5.2。我正在尝试
让我们升级到 Qt 5.9,因为此时我们不能超过 5.9.9
OS 系统.
到目前为止我唯一能够确定的是它出现是因为
我模型中的这个 QString 嵌入在 QML 的层次结构中,有一个
减速。我还从更新项目的等式中删除了 ListView
通过不在后端 C++ 端发出任何更改。相反,如果我删除
'emit my property()' 调用 QString,CPU 使用率下降到 5%。
我的意思是,如果我将 Text {} 调用移动到顶层 (main.qml)
并显示它,在所有其他条件相同的情况下,我对该应用程序的 CPU 使用来自
85% 降至 15%。
我的应用使用了 4 个浮动 windows,目前只实现了其中的 1 个。
我的模式; 属性 位于第一个 QML 'Window' 对象中。
我发现如果我将 (Window) 更改为 (Rectangle),我的 CPU 用法会下降到
大约 50%。
我还尝试在顶层定义 QString 属性 (main.qml) 和
只需在没有模型说明符的下部 'Window' 组件中使用它,本质上
改用顶级的,发现它同样慢 (85%)。我很难过
相信为 1 个 QString 更新屏幕会导致 CPU 混乱。
不幸的是,我不能 post 代码,因为它是专有的,但这是
它看起来像的基本轮廓(不是真实代码)。
我很感激任何人对这种情况的任何指示或知识。我花了一点
时间在线搜索线索,但尚未找到真正的解决方案。
谢谢!
main.qml
ApplicationWindow
{
Rectangle
{
Row
{
FirstWindowButton {}
SecondWindowButton {}
ThirdWindowButton {}
ForthWindowButton {}
}
}
}
FirstWindowButton.qml:
Button
{
Loader
{
sourceComponent: Window
{
flags: Qt.Window
FirstWindow {}
}
}
}
FirstWindow.qml:
Rectangle
{
MyListView
{
}
}
MyListView.qml:
Rectangle
{
Text
{
text: theModel.string_value <----this is the slowdown line
}
ScrollView
{
ListView
{
}
}
}
在花了一段时间查看可能导致 QML 问题的性能问题后,我们终于找出了导致此问题的原因。因为我们在使用
Rectangle
的 color
为 ApplicationWindow
的背景着色
必须每 90 毫秒重新绘制整个 Rectangle
。
改为使用 ApplicationWindow
的 color
属性 为背景着色。如此简单的错误,花了很多时间才弄明白。
感谢发表评论的人。
我正在开发一个 QML 应用程序,它在我发出时消耗了大约 85% 的 CPU 每 90 毫秒向 QML 显示一个 QString。我们目前正在使用 Qt 5.2。我正在尝试 让我们升级到 Qt 5.9,因为此时我们不能超过 5.9.9 OS 系统.
到目前为止我唯一能够确定的是它出现是因为 我模型中的这个 QString 嵌入在 QML 的层次结构中,有一个 减速。我还从更新项目的等式中删除了 ListView 通过不在后端 C++ 端发出任何更改。相反,如果我删除 'emit my property()' 调用 QString,CPU 使用率下降到 5%。
我的意思是,如果我将 Text {} 调用移动到顶层 (main.qml) 并显示它,在所有其他条件相同的情况下,我对该应用程序的 CPU 使用来自 85% 降至 15%。
我的应用使用了 4 个浮动 windows,目前只实现了其中的 1 个。 我的模式; 属性 位于第一个 QML 'Window' 对象中。 我发现如果我将 (Window) 更改为 (Rectangle),我的 CPU 用法会下降到 大约 50%。
我还尝试在顶层定义 QString 属性 (main.qml) 和 只需在没有模型说明符的下部 'Window' 组件中使用它,本质上 改用顶级的,发现它同样慢 (85%)。我很难过 相信为 1 个 QString 更新屏幕会导致 CPU 混乱。
不幸的是,我不能 post 代码,因为它是专有的,但这是 它看起来像的基本轮廓(不是真实代码)。
我很感激任何人对这种情况的任何指示或知识。我花了一点 时间在线搜索线索,但尚未找到真正的解决方案。
谢谢!
main.qml
ApplicationWindow
{
Rectangle
{
Row
{
FirstWindowButton {}
SecondWindowButton {}
ThirdWindowButton {}
ForthWindowButton {}
}
}
}
FirstWindowButton.qml:
Button
{
Loader
{
sourceComponent: Window
{
flags: Qt.Window
FirstWindow {}
}
}
}
FirstWindow.qml:
Rectangle
{
MyListView
{
}
}
MyListView.qml:
Rectangle
{
Text
{
text: theModel.string_value <----this is the slowdown line
}
ScrollView
{
ListView
{
}
}
}
在花了一段时间查看可能导致 QML 问题的性能问题后,我们终于找出了导致此问题的原因。因为我们在使用
Rectangle
的 color
为 ApplicationWindow
的背景着色
必须每 90 毫秒重新绘制整个 Rectangle
。
改为使用 ApplicationWindow
的 color
属性 为背景着色。如此简单的错误,花了很多时间才弄明白。
感谢发表评论的人。