三层结构的效率问题,还没满意答复!!一个主表对十几个从表,如何提高三层结构运行效率,欢迎高手发表意见 (150分)

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

sunrainwang

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个基本信息输入界面,里边有一个主表,对应十几个从表,考虑到用户输入信息方便性我用了一个TPageControl控件,
上面有十几个Tabsheet,主表的记录大概有3000多条,我每次取30条,从表有个主表的图形信息界面,比较耗内存和占较大的
传输负荷;我尝试了一下几种做法,效率都不是很理想,请高手指点:
1.先打开主表和其中第一个显示的从表,然后在点击每个Tabsheet的时候打开对应的数据集,但有明显的停顿;用户肯定不舒服
2.在客户端设置主从关系,在窗体打开的时候一次性打开所有的数据集,但速度很慢,数据量大的时候十几秒甚至几十秒,……
3.在中间层设置主从关系,用巢式数据结构把所有的从表依附在主表中,客户端一次性打开主表,也很慢,十几秒……
4.最后,我没辙了,打算用一个个弹出式窗体替代Tabsheet,这样问题肯定可以解决,但用户说还是用Tabsheet方便,……
为了提高运行效率,请问有什么更好的方法吗?或者如果有三层结构设计效率方面的经验也可以发表意见,分不够可以再加!
 
给它个等待窗体看看
DELPHI6不也是这么对我们的嘛,不过你可以把窗体做得生动一点
(歪点子)
 
我使用的是进度条,但是,有进度条也要等十几秒甚至几十秒也不是好滋味哦,谢谢!
 
你的系统是要在internet上用吗?如果是的话,你的资料又多還有圖檔﹐是必然有延遲的﹗
如果可以在每個使用的客戶端局域網中都建立一個相同結構的資料庫﹐就不會有明顯的延遲了﹗
剩下的問題就是資料庫同步的問題了﹖
 
internet上的B/S结构只是其中一部分,主要功能还是图形界面的形式;
 
当TabSheet被Show出来的时候加载它对应的数据。
 
但有明显的停顿;
 
解除主从关系,在TabSheet切换时利用主表的当前记录人工控制子表数据的加载,
减少数据传送量,在子数据加载时采用无序状态(不使用ClientDataSet的PageCount属性,
手工提取数据),同时把界面显示与数据提取利用线程分开;
 
一个主表对应十几个从表,
感觉你数据库设计的有问题。
在1..N的关系设计中,应该体现的是N..1的关系,而不是1..N
两者关系感觉是一样的,但体现给最终用户是不一样的。
另外在你所使用的操作中,将主从关系允许用户交互更改,这一点使得你的程序设计的复杂。
如果将它们在用户的操作上进行分离,应该不会那么复杂了。
 
to qiubole:
数据库设计的建议能不能解释清楚一点?对操作分离我考虑过,但我的项目是用户“实时监控”,有些东西它说了算。
否则项目不给你了结,也是很痛苦的。
 
你们这样的项目组织方式有问题!这样的合同不能签,否则只能费力不讨好!
 
如果我是老板,我……
依目前的情况还是签,公司刚起步,十几二十几万的项目姑且不说赢利,但可以稳住阵脚了……
以后如果真的搞大了,我就不做这样的东西了,唉,反正现实的东西很难说得清楚。谢谢!
 
我的意思是你们应该和客户商定一个需求并且签订合同,否则这个项目会成为你们公司的人力资源黑洞。这样无论对于你们还是对于客户都不是好事。
 
现在不能讨论这个问题了,关键是怎么帮我解决这个难题,谢谢!
 
首先,一定要在客户端设置主从关系,因为如果在服务器端设置主从关系,那么速度要比客户端低不少(我也不清楚为什么)
其次,尽可能通过设置SQL条件使主表的记录少一些。
最后,采用“用户操作哪个子表就临时打开哪个子表的方式”这样虽然会有些延迟,但是总比全都调入,却只使用到其中的一个强啊。。
 
可以考虑再减少一些数据下载量,例如每次打开的从表都是经过一些条件过滤的。
还有,可以考虑使用Cache机制,这样不用每次都下载已经下载过的数据。
 
主表记录3000条不算多
建议更改数据库设计,把从表分割成多个从表,减少从表记录,这样从表打开就不会慢了。
 
因为各个从表的表示意义不同而且对应关系不完全一致,合并不是很妥当.
现在我测试的结果发现:只有打开大量的某从表数据的(如上万条)和三维空视图时浏览速度明显
感觉到慢.所以我现在的做法是把三维空视图处理独立出来,改为带参数形式减缩数据传送压力
效果稍有改观,但并非完美!
我的数据库:Oracle
使用的是BDE连接.
 
我在客户端设置主从关系,据DELPHI开发人员指南介绍TClientDataSet.PacketRecords设置为0
并建议千万不要改动,我试验了一下,有好多表数据没下载,有谁知道PacketRecords的有关用法吗?
 
首先:
谢谢你回答我的问题
你所说的问题我去年做过一个三层结构的查询系统,我在客户端用的笨方法是 Frame
在每个Frame.FrameConstrainedResize 初始化数据。
你通过这个效果可以满足你的客户需求。达到Tabsheet的效果!不知道可不可行。
 

Similar threads

S
回复
0
查看
862
SUNSTONE的Delphi笔记
S
S
回复
0
查看
787
SUNSTONE的Delphi笔记
S
后退
顶部