中国开发网: 论坛: 程序员情感CBD: 贴子 477164
pcplayer
Action 的 source 没看过,根本想不到居然就是 Action 导致的!战兄高明!
我把绑定到按钮上的 Action 都去掉,按钮照样显示,的确 CPU 不再被占用了。

这个问题的现象本身很奇怪的:

我有一个 TFormB,它上面有大概20个按钮。每个按钮,我都给了图标。

我的程序在运行的时候,可能会同时弹出好几个 TFormB 的实例,显示好几个窗口。但 TFormB 的实例不是程序的主窗口。

奇怪的是,如果只显示一个 TFormB 的实例窗口,CPU 很正常。如果同时显示2个以上,则:

1. 如果 TFormB 的任何一个实例窗口获得焦点,则从任务管理器里观察到程序占用CPU达到30%-50%,如果开上4、5个TFormB的实例窗口,甚至可能达到70%。

2. 在上述情况下,如果鼠标点程序的主窗口,让主窗口获得焦点,则程序对CPU的占用立即下降到 0

所以才觉得现象十分奇怪,为啥窗口占用焦点的时候才占用CPU?为啥 TFormB 只有一个实例的时候,并不占用CPU。

经过反复试验,我才发现,只要把放那堆按钮的 Panel.Visible := False 不显示,上述问题就不存在了。这样才怀疑到是按钮导致的。

更进一步的是,当显示出来的按钮数量不多(现在是5个)的时候,就算同时显示出多个 TFormB 的实例,也没有占用CPU的问题。

因此,我现在的办法是隐藏那些按钮,只显示少数几个按钮。其它按钮要拉下来才能看到 --- 改变放按钮的 Panel 的 Height 来达到隐藏和显示的目的,居然问题就解决了。

经过战兄提醒,我把按钮的 Action 都去掉,运行程序,同时显示多个 TFormB 的实例窗口并且显示所有按钮,CPU 的占用还是0。

看来,的确是 TAction 的问题。

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录