Foxtable(狐表)用户栏目专家坐堂 → 再次讨论效率的问题


  共有3767人关注过本帖平板打印复制链接

主题:再次讨论效率的问题

帅哥哟,离线,有人找我吗?
blackzhu
  1楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57596 威望:0 精华:15 注册:2008/9/1 9:45:00
再次讨论效率的问题  发帖心情 Post By:2013/9/20 11:04:00 [只看该作者]

既然如此,我重新将已付款列改为逻辑型,然后修改代码,直接在表达式中用1和0代替True和False进行比较:

Dim nms As List(of String) = DataTables("表A").GetUniqueValues("","客户")
DataTables(
"表B").StopRedraw()
For Each
nm As String In nms
    Dim
dr As DataRow = DataTables("表B").AddNew()
   
dr("客户") = nm
    dr
("付款合计") = DataTables("表A").Compute("Sum(金额)", "客户 = '" & nm & "' And 已付款 = 1")
   
dr("欠款合计") = DataTables("表A").Compute("Sum(金额)", "客户 = '" & nm & "' And 已付款 = 0")
Next
DataTables(
"表B").ResumeRedraw()

在表A为5000行,客户数为1000的时候,执行上述代码所花费的时间为0.23秒,效果非常好。


  我用帮助的例子测试了,因为我的机器不太好,我在0.25秒的按钮上测试了三次


  第一次: 1.21875

  第二次: 0.09875

  第三次: 0.092

  第四次: 1.015625


  为啥 四次的结果不一样.


  我后来又加多了一个产品列 又进行了一次测试:


  代码如下:


  Dim nms As List(of String()) = DataTables("表A").GetUniqueValues("","客户","产品")

DataTables("表B").StopRedraw()
For Each 
nm As String() In nms
    Dim 
dr As DataRow = DataTables("表B").AddNew()
    
dr("客户") = nm(0)
     dr("产品") = nm(1)
    dr
("付款合计") = DataTables("表A").Compute("Sum(金额)""客户 = '" & nm(0) & "' And 产品='" & nm(1) & "' And 已付款 = 1")
    
dr("欠款合计") = DataTables("表A").Compute("Sum(金额)""客户 = '" & nm & "' 
And 产品='" & nm(1) & "' And 已付款 = 0")
Next
DataTables(
"表B").ResumeRedraw()

  又进行了四次测试:

  第一次:  2.390625
  第二次: 1.078125
  第三次:  1.09375
  第四次:  1.15

  测试下来  多一个列的数据  明显慢了很多,  如果加多多列  速度是不是会慢N多倍?

  


 回到顶部