2017-06-02 11 views
0

が発生します。は、高いCPU使用率再現する方法

  • は私のコード
を表示されたウィンドウの上にマウスをキープを実行します

あなたのハードウェアに依存しますが、CPU使用率がかなり高いことがわかります。 my PCでは、それは20%(4つの仮想コアのそれぞれで5%)です。

このテストケースのための私のモチベーション:私の本当のアプリで私は目に見えない(culled)の項目の多くを持っている、とカリングは、CPUの使用率と多くのことを助けることながら、それは私が「と同じくらいの助けにはなりません期待しています。

なぜCPU使用率が高いのか、それを減らす方法についてのアイデアがあります。私はQMLプロファイラでそれをプロファイリングしまし

import QtQuick 2.0 

Rectangle { 
    id: root 
    color: "black" 
    property real rotAngle: 0 
    NumberAnimation on rotAngle { 
     from: 0 
     to: 360 
     loops: Animation.Infinite 
     running: true 
     duration: 500 
    } 
    transform: Rotation { 
     origin.x: root.width/2 
     origin.y: root.height/2 
     angle: root.rotAngle 
    } 
} 

、どの:

私のコード

main.qml

import QtQuick 2.5 
import QtQuick.Window 2.2 

Window { 
    visible: true 
    width: 800 
    height: 500 

    MouseArea { 
     width: 1 
     height: 1 
     hoverEnabled: true 
    } 
    AnimatedItem { 
     anchors.centerIn: parent 
     width: 100 
     height: 100 
    } 

    Repeater { 
     model: 8000 
     Item { 
      opacity: 0 
      layer.enabled: true 
      width: 1 
      height: 1 
     } 
    } 
} 

AnimatedItem.qml QMLにわずかな時間が費やされていることが示されています。だから、私はまた、C++プロファイラ(CodeXL)でプロファイリングしました。それはQSGNodeUpdater::isNodeBlocked(QSGNode*, QSGNode*) constを呼び出すため、多くの時間がQSGRootNode::~QSGRootNode()に費やされていると報告しています。私はQtのソースを見てきましたが、なぜそれが前者を呼び出すのかを理解できませんでした。

答えて

0

私は、少なくともテストケースで動作する解決策を見つけた:彼らはunculledしているときにそれをバックに設定、その後、ヌルにカリングアイテムの親を設定し

私の実際のアプリでは役立たない場合もありますが、これについて詳しくは解説しません。