如何优化加快界面显示速度(100)

  • 主题发起人 主题发起人 sweidong
  • 开始时间 开始时间
S

sweidong

Unregistered / Unconfirmed
GUEST, unregistred user!
mdi中子窗口有很多个combobox,在子窗口创建时我要对所有的combobox的items赋值(从数据库中遍历,有几条到几百条不等),其中还有几个combobox是一样(如儿童,父亲,母亲各自的国籍、民族、户口地址等等),我也得给它从数据库遍历赋值,用AddObject方法添加code和name两列,这样就造成该子窗口显示出来速度很慢,有什么办法可以优化一下,谢谢
 
在dropdown的时候才把药选取的内容加进来。
 
ComboBox1.Items.BeginUpdate; 填充Items ComboBox1.Items.EndUpdate; ComboBox2.Items.Assign( ComboBox1.Items );--------------------或者用DBLookupComboBox。
 
没有跟好的办法,只能在起动是就把数据库中的内容写赋值了,以后现实Form得Mid即可!
 
没有什么好办法的。或许你可以考虑线程(大材小用了);
 
这些东西是不会经常变的,那么你完全可以在登录的时候把这些东西下载到本地来,然后用到的时候从本地加载,避免从数据库读取。登录的时候慢一点点有般都不会计较。如果在form开始时直接读取,建议用线程,分开读取加载,也算不上大材小用了。
 
遍历取值不一定要写在子窗体的create事件里面,可以在mdi窗体创建时就创建保存(如儿童,父亲,母亲各自的国籍、民族、户口地址等等这几个共用的)。这只是一种思路,combobox的onEnter事件已经也可以,自己考虑
 
datamodal中加入公用变量。吧数据在启动的时候先导入,mid窗体开启直接assign就可以!
 
谢谢各位,好像Tuatara的比较现实一点,znxia的也有用,只是assgin方法不能提高速度,不知用指针行吗,该如何做,多线程不会,哪位能举个例子学习下
 
doublebuffer设置为TRUE
 
建议在OnDropDown事件里按需即时读取,这样用到哪个就读取哪个,还可以结合TComboBox(Sender).Tag属性赋值,来判断后台有没有数据,这样即使读不到数据,也只读一次(TComboBox(Sender).Tag:= -1;)procedure TForm1.ComboBox1DropDown(Sender: TObject);begin with TComboBox(Sender).Items do begin if Count = 0 then //第一次读取数据 begin BeginUpdate; try //例如: TComboBox(Sender).Items.Add('1'); TComboBox(Sender).Items.Add('2'); finally EndUpdate; end; end; end;end;
 
Tcombobox每次添加就会刷新,关闭就行了
 
添加个DataModule然后把数据缓冲到数据集里面去
 
如果经常变动数据的话,加载的时候用TComboBox.Items.BeginUpdate;...TComboBox.Items.EndUpdate;如果只是启动的时候窗体弹出的速度慢的话,可以用线程加载或者直接在程序启动的时候就把数据加载好,将mdi子窗体先hide。如果总的数据量不是很庞大的话,也可以直接把数据加载到DataModule里面的数据集中,用的时候直接从内存加载。
 
我的做法是 做一个 base class,放不重复的N个dropdown,n个dataset ,做一个dropdown事件,然后在需要的地方挂载事件,实现一个dropdown,如果数据变化,用一个modify_date ,如果表修改时间大于最后刷新时间,就reload,否则就用缓冲的,不知道能否解决问题.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部