4

aが(Item of )や(Item of )TActionなどのオブジェクトにリンクされていて、そのオブジェクトが実行時に表示される場合、フォーム内でマウスを移動するたびに(ツールバー以外の場所)、余分な負荷がかかっているようです。表示されているTActionの数に基づいてCPU上で、つまり、前述のバーのいずれにもTActionにリンクされたアイテムが表示されていないときにマウスを移動した場合と比較されます。TToolButtonTToolBarTActionClientItemTActionToolBar

実行される余分な負荷の顕著な割合は、実行しているリグの種類に完全に基づいていることは明らかですが、私が気付いたのは、次のようなアプリケーションがある場合、実際の違いが大きくなる可能性があることです。

  • 目に見えるTActionリンクアイテムがたくさん
  • コントロールの外観の変更など、onMouseOverイベントのマイナー計算をすでに実行しているカスタムコンポーネント
  • カスタムビジュアルスタイル

では、問題は、表示されているアイテムにリンクされたTActionコンポーネントがマウスの動きの処理に影響を与える理由です。

4

2 に答える 2

7

アクションの設計は、アクションのアイドル時間の更新に基づいています。マウスを動かすと、アプリケーションはキューに入れられた大量のメッセージを受け取ります。キューが空になるたびに、アプリケーションはアイドル状態であると見なされ、すべてのアクションが更新されます。これにより、CPU 使用率が高くなる可能性があります。

この問題はよく知られており、VCL で認識されています。たとえば、TApplication.ActionUpdateDelayを見てください。

于 2013-01-29T07:36:06.850 に答える
1

メモリから: マウスを動かすたびに OnUpdate イベントがトリガーされるためです。少なくとも、マウスを動かすたびにすべてのアクションの列挙がトリガーされ、OnUpdate イベントが割り当てられているかどうかが確認され、トリガーできるようになります。リンクされたコントロールが表示されていない場合、これらのイベントはトリガーされません。

于 2013-01-29T07:29:40.203 に答える