Foxtable(狐表)用户栏目专家坐堂 → 请教运行效率问题


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

主题:请教运行效率问题

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


加好友 发短信
等级:小狐 帖子:300 积分:2307 威望:0 精华:0 注册:2012/11/14 11:25:00
请教运行效率问题  发帖心情 Post By:2013/10/12 19:59:00 [只看该作者]

 表A是SQLGroupTableBuilder生成的表,需要全部导入表B,使用FILL方法不成功,使用如下代码耗时27秒 

With Tables("表B"),

    .StopRedraw

    Dim dt0 As DataTable=DataTables("表A")

DataTables("表B").DataRows.clear

For Each dr As DataRow In dt0.DataRows

        Dim dr2 As DataRow=DataTables("表B").AddNew

For Each dc As DataCol In dt0.DataCols

                   dr2(dc.name)= dr(dc.name)

        Next

    Next

    .ResumeRedraw

End With

请教大师对上述既遍历行又扁历列的情况如何修改以提高运行效率,谢谢。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/12 20:18:00 [只看该作者]


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


加好友 发短信
等级:一尾狐 帖子:431 积分:3214 威望:0 精华:2 注册:2011/9/10 21:35:00
  发帖心情 Post By:2013/10/12 20:30:00 [只看该作者]

有工具不用,非要手工编码,用了手工编码,就别谈什么效率了。你那编码已经是手工编码里面最简洁的了!!!!


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


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
  发帖心情 Post By:2013/10/12 20:38:00 [只看该作者]

如果确实要这样行列取值,还是先获得表的行数,定义数组,然后将A表数据读入数组,然后再写入B表,用Excel我有过经验,不会超过1秒

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


加好友 发短信
等级:小狐 帖子:300 积分:2307 威望:0 精华:0 注册:2012/11/14 11:25:00
  发帖心情 Post By:2013/10/12 20:46:00 [只看该作者]


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

Dim f As New Filler
f.SourceTable = DataTables("表A")
f.DataTable = DataTables("表B")
f.Fill()

生成表A只用了0.09秒,后面这个代码用了30秒,可是存在什么问题?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/12 20:57:00 [只看该作者]

 我测试了一下新增行的耗时,发觉一行一行新增太耗时间,试试一次性新增,可能会提升一些速度。

Dim st As Date = Date.Now '将开始时间保存在变量st中

CurrentTable.StopRedraw
For i As Integer = 0 To 5000
    CurrentTable.AddNew
Next
CurrentTable.ResumeRedraw

'CurrentTable.AddNew(5000)
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数

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


加好友 发短信
等级:二尾狐 帖子:599 积分:4188 威望:0 精华:0 注册:2011/12/21 11:25:00
  发帖心情 Post By:2013/10/12 22:17:00 [只看该作者]

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

 

5000行数据复制大约0.2秒


 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/10/12 22:25:00 [只看该作者]

 我测试7楼的例子,直接复制,也是只要1秒左右的时间。

 回到顶部