Foxtable(狐表)用户栏目专家坐堂 → 继续讨教优化


  共有1713人关注过本帖树形打印复制链接

主题:继续讨教优化

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/6 14:42:00 [显示全部帖子]

 没办法的,取值就至少需要10秒,赋值也需要时间

 

Dim st As Date = Date.Now

Dim ls As List(Of String) = DataTables("凭证").GetValues("凭证类别与编号")
Dim dic As new Dictionary(Of String, String)
For i As Integer = 0 To ls.count-1
    Dim str As String = DataTables("凭证").GetComboListString("科目编码","凭证类别与编号 = '" & ls(i) & "'")
    dic.add(ls(i), str)
Next
msgbox("耗时: " & (Date.Now - st).TotalSeconds & "秒")
For i As Integer = 0 To 3000
    Dim dr As DataRow = DataTables("凭证").DataRows(i)
    If dr.IsNull("借方金额") = False  Then
        dr("部门编码") = dic(dr("凭证类别与编号"))
    End If
Next
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/6 14:44:00 [显示全部帖子]

 如果想继续优化,你可以自己去实现 GetComboListString 的功能。

 

 也就是,循环一次整个表,得到字典 dic ,具体自己去探索,类似 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=76545&replyID=529794&skin=1

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/6 15:54:00 [显示全部帖子]

 认认真真看4楼和5楼,自力更生。

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/6 16:34:00 [显示全部帖子]

 你循环的次数越多,执行select查询的次数越多,就越慢的。

 

 所以,建议你直接循环表格,去实现比较区分,减少使用查询,最后得到你要结果,这样才行。类似筛选重复那样做。


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/4/6 21:43:00 [显示全部帖子]

 你要做这种操作,数据量越大肯定越耗时,数据量越大越考验算法。


 回到顶部