4

如果 aTAction链接到诸如TToolButton( Item of TToolBar) 或TActionClientItem( Item of TActionToolBar) 之类的对象,并且该对象在运行时可见,那么每当您在表单中移动鼠标(工具栏以外的任何位置)时,似乎都会完成额外的负载根据可见 TAction 的数量在 CPU 上进行比较,这与在前面提到的任何一个条上都看不到任何 TAction 链接的项目时移动鼠标进行比较。

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

  • 很多可见的 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 回答