【问题标题】:Why are : visible, control assigned TActions affecting the CPU usage of the application?为什么:可见,控制分配的 TAction 会影响应用程序的 CPU 使用率?
【发布时间】:2013-01-29 07:23:05
【问题描述】:

如果TAction 链接到诸如TToolButtonTToolBar 的项目)或TActionClientItemTActionToolBar 的项目)之类的对象,并且该对象在运行时可见,则无论何时移动鼠标在表单中(除了工具栏之外的任何地方),基于可见 TAction 的数量似乎在 CPU 上完成了额外的负载,这与在任何一个 TAction 链接项目都不可见时移动鼠标相比前面提到的酒吧。

很明显,完成的额外负载的显着百分比完全取决于您正在运行的钻机类型,但我注意到,当您的应用程序具有以下功能时,实际差异可能会很大:

  • 很多可见的 TAction 链接项目
  • 一个自定义组件,它已经对 onMouseOver 事件执行了较小的计算,例如更改控件的外观
  • 自定义视觉样式

那么问题是为什么可见项链接的TAction组件会影响鼠标移动的处理?

【问题讨论】:

  • 使用 Application.ActionUpdateDelay 值进行播放,将其设置为更高的值,CPU 使用率会下降
  • 谢谢,@whosrdaddy,对此一无所知。 +1

标签: windows delphi cpu-usage taction


【解决方案1】:

的动作的设计是基于动作空闲时间更新。当您移动鼠标,应用程序收到大量排队的消息。每个队列被清空时,应用程序被认为是空闲的,所有的动作都更新。这会导致 CPU 使用率过高。

这个问题在 VCL 中众所周知并得到承认。例如,看看TApplication.ActionUpdateDelay

【讨论】:

  • 感谢详细解答
【解决方案2】:

凭记忆:因为每次鼠标移动都会触发 OnUpdate 事件。至少每次鼠标移动都会触发所有动作的枚举,以查看是否分配了它们的 OnUpdate 事件以便可以触发它们。当链接的控件不可见时,不会触发这些事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 2013-03-26
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多