Foxtable(狐表)用户栏目专家坐堂 → 帮我提速啊~ 从 90几 秒提高到了 2 秒左右 就看代码强不强了。。。


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

主题:帮我提速啊~ 从 90几 秒提高到了 2 秒左右 就看代码强不强了。。。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
帮我提速啊~ 从 90几 秒提高到了 2 秒左右 就看代码强不强了。。。  发帖心情 Post By:2010/11/5 21:50:00 [显示全部帖子]

在test表中,第一列是序号(不参与代码运行,只是摆设,呵呵),第二列是有重复号码的列,第三列中对应第二列相同号吗的只有一行有内容···

要求达到:补齐第三列的内容,即,第二列相同号码的,补齐第三的内容:

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.table

 

命令窗口用下面代码试一试: 我这里要90秒啊···

Dim s2 As Date = Date.Now()
Dim s As String
s = DataTables("test").GetComboListString("第二列","[第三列] is not null")

Dim n As Integer = 0
For i As Integer = 0 To Tables("test").count -1
    If Tables("test")(i,"第三列") = Nothing
        Continue For
    Else       
        Dim drs As List(Of DataRow)
        drs = DataTables("test").Select("[第二列] = '" & Tables("test")(i,"第二列")  & "' ")
        For Each dr As DataRow In drs
            If dr("第三列") = Nothing
               dr("第三列") = Tables("test")(i,"第三列")
            End If
        Next
    End If
Next
Messagebox.Show("处理完毕! 耗时: " & (Date.Now -s2).TotalSeconds)   '【90.5s  太慢】


[此贴子已经被作者于2010-11-6 1:47:18编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/5 21:56:00 [显示全部帖子]

就是这样的结果:


图片点击可在新窗口打开查看此主题相关图片如下:test.jpg
图片点击可在新窗口打开查看


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 0:08:00 [显示全部帖子]

【0.9s  还行】 什么机子啊,我这还要10秒呢···

 

总之,比1楼的快多了~  哈哈,谢谢C版。。。。。。。


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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 0:25:00 [显示全部帖子]

是的又提高近一倍的速度了~~   谢谢。

 

不过有问题: 如果第三列的内容不在同号吗的第一行,就会被清空了~~~

[此贴子已经被作者于2010-11-6 0:28:29编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 0:30:00 [显示全部帖子]


图片点击可在新窗口打开查看此主题相关图片如下:test1.jpg
图片点击可在新窗口打开查看

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 1:04:00 [显示全部帖子]

很完美啦~  呵呵。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 1:18:00 [显示全部帖子]

用这个SQL语句更快了, 再次感谢C版的启发····  献给狐友们看看,从我1楼的 90秒 到下面代码只用 2.5秒~~

 (而且不用临时表过渡了, 不知道下面的dt是不是临时表?图片点击可在新窗口打开查看

Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.CommandText = "Select * From {test} Where 第三列 Is Not Null"
dt = cmd.ExecuteReader()

For Each dr As DataRow In DataTables("test").DataRows
    Dim dr1 As DataRow = dt.Find("第二列 = '" & dr("第二列") & "'")
    If dr1 IsNot Nothing Then
        dr("第三列") = dr1("第三列")
    End If
Next

[此贴子已经被作者于2010-11-6 1:19:41编辑过]

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2010/11/6 12:04:00 [显示全部帖子]

以下是引用狐狸爸爸在2010-11-6 10:23:00的发言:

呵呵,记住一个原则,在某个DataTable循环进行Compute或Find,并将结果写入同一个DataTable,结果会慢100倍。

所以解决的办法是分开,宁愿临时生成一个DataTable。

您的帮助文件应该增设一个特别提醒栏目,类似这样的话,可以加入进去,以提示基础差的我等。。。  100倍啊~ 足以提振信心了····    记得那位在一个窗口中用了几十个Table结果打开时特慢,如果有这样一个栏目提醒大家,不是更好吗~    图片点击可在新窗口打开查看


 回到顶部