windowsdelphicpu-usagetaction

Why are : visible, control assigned TActions affecting the CPU usage of the application?


If a TAction is linked to an Object such as TToolButton( Item of TToolBar ) or TActionClientItem( Item of TActionToolBar ) and that Object is visible on runtime, then whenever you move the mouse in the form (anywhere but the Toolbars), there seems to be extra load being done on the CPU based on the number of visible TActions, that is in comparison to moving the mouse when none of the TAction linked Items are visible on either of the previous mentioned bars.

It's obvious that the noticeable % of extra load done is completely based on what kind of a rig you are running but what I have noticed is that the actual difference can be significant when you have an application with :

So the question is why do visible item linked TAction components affect the processing of mouse movement?


Solution

  • The design of actions is based on idle time updating of actions. As you move your mouse, the application receives lots of queued messages. Each time the queue is emptied, the application is deemed to be idle, and all the actions are updated. And this can lead to high CPU utilization.

    This issue is well known and acknowledged in the VCL. For example, take a look at TApplication.ActionUpdateDelay.