如何提高ClientDataset的写入速度?(100分)

  • 主题发起人 主题发起人 kite20020304
  • 开始时间 开始时间
利用XML,Clientdataset支持XML文件的,可以把ClientDataset中的数据保存到XMl文件中,然后提交到中间层处理.
现在正在研究中....
 
zsy146说得对,我就是这么做的,xml是中间层返回的数据集文件,然后一次导入clientdataset,感觉这样最快
 
中间层是用C写的,处理XML比较麻烦
再者说,如果中间层用XML的方式,中间层+本地处理的时间比以前更长了
 
正好在搞这方面,
 
用存储过程,或是自Insert语句并用使用参数和预编译.如果是短时间内插入大量数据,而且是短期行为的话,可以先把索引都删除了,再插再建索引.
 
觉得怎么也快不了你总要从中间层到客户端吧!
不过你中间层是什么格式的。
 
前面加上 ClientDataSet1.disablecontrol看看
 
cds毕竟是一种文件型的结构数据表,并且并不知道其格式,所以存放的数据不易过多.
 
with ClientDataset1 do
begin
DisableControl;
try

for ...
begin
ClientDataSet1.Append;
ClientDataSet1.Fields[0].Value := ...
...
ClientDataSet1.Fields[N].Value := ...
end;
ClientDataSet1.Post;//移到外面來

finally
EnableControl;
end;
end;
 
3万行记录
如果格式统一
建议用BCP导入,大概一两秒吧
clientdataset是重量级控件,这里根本不就该选用它
 
可能我前面描述的不是太清楚,抱歉!

系统采用三层架构
S:数据库 Oracle
S:中间层 Tuxedo + Linux (标准C)
C:采用ClientDataSet作为数据存储

客户端启动时下载一些必要的数据,其中有一张表约3万行数据(30个字段),中间处理的时间约为2s(Tuxedo特有的格式FML32),客户端写入CDS速度较慢(已设置DisableControl),如何提高客户端写入CDS的速度?
 
采用 存储过程 和 事务管理
 
中间层采用传数据包的形式传到客户端,
clientdataset.data := 传回的数据包;
 
可以对数据包进行压缩传输.
 
对数据进行分段提交,首先将数据存放到客户机的内存中,应该为100条左右对数据进行提交一次,具体情况经过测试在确定。
在对数据库进行提交前,将数据库中的索引信息进行删除,待数据全部提交后重建需要信息应该能够提高数据的写入速度。
 
我也遇到过同样的问题。可以通过CloneCursor解决。请参见我的笔记:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4566
最后两条。
 
路过,听高手上课
 
可以试一下AppendRecord
 
可以尝试把表锁改成行锁,然后启用多线程模式
 
你的意思是……
如果你想提高数据从中间层到客户端(cds)这个“下载”过程的速度,那么很难了!也许你可以考虑分段、逐步下载。
如果想提高客户端编辑数据(如果插入)的速度,建议:
再增加一个cds,这个cds和原来的那个结构一样,但不包含数据或只包含少量数据。用这个
cds编辑数据。
cds下载数据的时候,也会建立相应的索引,因此数据多的时候插入数据会很慢
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
777
import
I
后退
顶部