讨论一下MIDAS的效率(0分)

  • 主题发起人 主题发起人 yhee
  • 开始时间 开始时间
Y

yhee

Unregistered / Unconfirmed
GUEST, unregistred user!
准备用三层开发系统,首先写了几个小程序测试一下各种实现方式的性能。发现ClientDataset打开一张10万行的表需要5分钟左右,太慢了,跟踪发现时间大部分耗费在Server调用MIDAS打包数据,因为跟着跟着就调用MIDAS.DLL了,不知道这个黑盒子里的情况,但是可以肯定,它用了一个效率很差的打包算法。可能不断的申请释放空间,就像
for i:=1 to 10000
data:=data+delta;
一样。只是猜测。
不要跟我说不要使用clientdataset打开这么多记录,我在这只是想测试midas的性能,它都拿来卖钱了,为什么性能还这么差????????????
 
晕!我想问你一下你的应用服务器是用ADO吗?我测了ADO不可能那么慢。
 
你应该和C/S模式进行比较,才能够说明问题
”ClientDataset打开一张10万行的表需要5分钟左右“,不能说明什么
你是什么机器(硬件性能)?
 
用ADO取数据也不慢,网络传输效率也不慢,和CS比较性能差N多倍。不信你用clientdataset打开一张10万的表,然后再dbgrid上按ctrl-end到最后一行。看看要多久。
可能我的说法容易误解,我的打开是指数据全部取到clientdataset,比如用clientdataset1.Last,而不是只取packetsize条。
 
10万记录一起来一定是这样的啦,不要一下子下载那么多数据嘛
 
to:wszysystem
你这样是回避问题,并不是解决问题。你总不能禁止用户一下子把scroolbar拖到最后?
或者按ctrl-end到最后一条记录?
我的兴趣在于想办法解决问题,而不是想办法掩盖问题。
 
我的想法和你不一样,在接口控件有一个属性是设置一下下载多少数据的,如果你下载太多,就会是这样的。你应设置不要下载太多数据。
 
你的方法是可以的,可是不是我想要的。而且这样可能会给用户造成坏印象,认为这个系统有bug,因为你看,同样的一个clientdataset,他一页一页的可以翻到最后,因为每次只下载packetsize量,而用ctrl-end就到达不了最后一条记录!而是被服务器给截断了。
 
我所遇到的问题和你一样,我们在设计的时候常避免一下子下载全部数据,只让用户查找某一条件的数据,
 
修改dbclient.pas???,dataset.last用一个循环代替,到是可以解决这个问题,可是这样的话,用不了runtime package。说到底还是没有从根本上解决这个问题。
 
屬性里有一個 -1值改成10 就ok了
 
To ljy_20,
你这个设置当执行ClientDataset.Last就没用了,不信试试看。
 
结贴,谢谢各位!
 
接受答案了.
 
后退
顶部