以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  继续讨教优化  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98747)

--  作者:hbhb
--  发布时间:2017/4/6 11:51:00
--  继续讨教优化
色大王大师:见实例,请问如何提高效率?假如我要对表数据进行修改,只是一段就要10秒,那岂不是太慢了。有劳指点优化!
--  作者:hbhb
--  发布时间:2017/4/6 11:52:00
--  
实例
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目9.rar


--  作者:hbhb
--  发布时间:2017/4/6 13:34:00
--  
如果是这种速度,不跳楼才怪!
--  作者:有点色
--  发布时间: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 & "秒")


--  作者:有点色
--  发布时间:2017/4/6 14:44:00
--  

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

 

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

 


--  作者:hbhb
--  发布时间:2017/4/6 15:41:00
--  
如果10万行数据的表,分析、规范填列这张表,不是要半天吗?为什么求一个集合这么吗?
SQL生成临时表呢?
数组呢?
怎么搞?
帮帮忙吧,色老兄!!!!!!!您肯定有办法。

--  作者:有点色
--  发布时间:2017/4/6 15:54:00
--  
 认认真真看4楼和5楼,自力更生。
--  作者:hbhb
--  发布时间:2017/4/6 16:15:00
--  
水平不够,跟不上呀。能看懂就不错了。已经提高几倍了,5楼的看不懂。
--  作者:hbhb
--  发布时间:2017/4/6 16:29:00
--  
大师:我搞不懂,如下代码,为何要运行很长时间,赋予集合的集合也慢,什么原因?用字典就快吗?为什么?
dim jhjh as new list(of list(of datarow)
dim dpzhs() as s tring 
Dim xhs As new List(of DataRow)
For Each dr As String In dpzhs
    xhs = DataTables("dtpzzb").Select("pzzb5 = \'" & dr & "\') 
jhjh.add(xhs)
Next



--  作者:hbhb
--  发布时间:2017/4/6 16:31:00
--  
dim jhjh as new list(of list(of datarow)
dim dpzhs() as sTring = {“a”,“b”,“c”,“d”}      \'---约100个
Dim xhs As new List(of DataRow)
For Each dr As String In dpzhs
    xhs = DataTables("dtpzzb").Select("pzzb5 = \'" & dr & "\') 
jhjh.add(xhs)
Next