起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 169|回复: 8

急啊!!!!代码优化问题??请尽快回复!多谢!**

[复制链接]
发表于 2007-8-16 11:30:10 | 显示全部楼层 |阅读模式
DataSetBroker2.DataSet.DisableControls;
             DataSetBrokerCZCL.DataSet.DisableControls;
             query1.DisableControls;
             DataSetBroker2.DataSet.First;
//query1.recordcount = 44;
//DataSetBroker2.DataSet.recordcount = 3840;
             while not DataSetBroker2.DataSet.Eof do
             begin
                   stationID := DataSetBroker2.DataSet.FieldByName('STATIONID').AsString;
                   query1.Locate('gateID',stationID,[]);
                   DataSetBrokerCZCL.DataSet.Append;
                   DataSetBrokerCZCL.DataSet.FieldByName('TheDate').value:=DataSetBroker2.DataSet.FieldByName('TheDate').value ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Bid_UnitName').AsString:= query1.FieldByName('UnitName').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Bid_UnitID').AsString:= query1.FieldByName('Bid_UnitID').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Period').AsString:=DataSetBroker2.DataSet.FieldByName('Period').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('PowerValue').Asfloat:=DataSetBroker2.DataSet.FieldByName('PowerValue').Asfloat ;
                   DataSetBrokerCZCL.DataSet.FieldByName('PeriodNO').AsInteger :=DataSetBroker2.DataSet.FieldByName('ThePoint').AsInteger ;
                   //DataSetBrokerCZCL.DataSet.Next;
                   DataSetBroker2.DataSet.Next;
             end;
             DataSetBrokerCZCL.DataSet.ApplyUpdates;
             DataSetBroker2.DataSet.EnableControls;
             DataSetBrokerCZCL.DataSet.EnableControls;
             query1.EnableControls;
             query1.Close;
、、、、、、、、、、、、、、、
这段代码是在程序初始化里的,现在运行的时间需要1分钟,请问有什么办法优化一下么?救救我吧……

初始化部分的完整代码.txt

5.77 KB, 下载次数: 74

回复

使用道具 举报

发表于 2007-8-16 12:12:52 | 显示全部楼层
楼主,首先提个建议,不要用这么吓人的主题,直接说问题就可以了
下面说说你的代码

1、try 应该放到  StatusWindow := TCT1.Create(context);后面不是前面

2、
   while not DataSetBroker1.DataSet.Eof do
         begin
               combobox1.Items.Add(DataSetBroker1.DataSet.FieldByName('UnitName').AsString) ;
               DataSetBroker1.DataSet.Next;
         end;
这个循环外也应该加上EnableControls和DisableControls

3、DataSetBrokerCZCL 这个数据集进来的时候设置关闭,等传入SQLFilter条件后再打开,这样不会去取多于的数据,也不会close和open多像服务端发SQL语句

我先说这几个,下面我再接着看,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 14:13:23 | 显示全部楼层
好的,下次会注意。代码已经像你说的那样改过了,但是没有效果,还是需要1分钟的时间才能看到界面。
回复 支持 反对

使用道具 举报

发表于 2007-8-16 14:17:40 | 显示全部楼层
4、while not DataSetBroker2.DataSet.Eof do
             begin
                   stationID := DataSetBroker2.DataSet.FieldByName('STATIONID').AsString;
                   query1.Locate('gateID',stationID,[]);
                   DataSetBrokerCZCL.DataSet.Append;
                   DataSetBrokerCZCL.DataSet.FieldByName('TheDate').value:=DataSetBroker2.DataSet.FieldByName('TheDate').value ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Bid_UnitName').AsString:= query1.FieldByName('UnitName').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Bid_UnitID').AsString:= query1.FieldByName('Bid_UnitID').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('Period').AsString:=DataSetBroker2.DataSet.FieldByName('Period').AsString ;
                   DataSetBrokerCZCL.DataSet.FieldByName('PowerValue').Asfloat:=DataSetBroker2.DataSet.FieldByName('PowerValue').Asfloat ;
                   DataSetBrokerCZCL.DataSet.FieldByName('PeriodNO').AsInteger :=DataSetBroker2.DataSet.FieldByName('ThePoint').AsInteger ;
                   //DataSetBrokerCZCL.DataSet.Next;
                   DataSetBroker2.DataSet.Next;
             end;
这个循环里面的数据有能达到多少量级别,如果大,那么我建议用存储过程来做

5、在这个循环前和后,都有给DataSetBrokerCZCL 赋上SQLFilter属性过滤数据,前面过滤后,对这个数据集增加数据,然后再过滤意义在哪里呢?我感觉没有这个是不需要的吧,用后面这个就可以了,

6、在最后又有一个过滤条件,同样不需要先关闭然后传条件,然后再打开,直接设置关闭传好条件后,再打开

7、你在1楼说1分钟的时间,你打开监控,看看时间究竟耗在哪里了
回复 支持 反对

使用道具 举报

发表于 2007-8-16 15:27:22 | 显示全部楼层
强烈建议用储存过程做!!其他方式不用考虑了,怎么优化数量级都不会变得。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-16 16:02:56 | 显示全部楼层
时间主要就是在这个循环里面,我现在已经改为先写到库里面在过滤了,时间在15秒左右
回复 支持 反对

使用道具 举报

发表于 2007-8-16 16:22:59 | 显示全部楼层
循环里面有多少数据,如果就几条还好,如果比较多,还是用存储过程来实现存储过程里面的需求,要不速度再减少可能没有了
回复 支持 反对

使用道具 举报

发表于 2007-8-21 09:52:19 | 显示全部楼层
楼主,怎样了?请反馈一下
回复 支持 反对

使用道具 举报

发表于 2007-8-23 09:56:58 | 显示全部楼层
这个帖子我结了,有问题请重新开帖吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-26 07:18 , Processed in 0.041774 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表