Foxtable(狐表)用户栏目专家坐堂 → abcdzabcdz 的【转换遇到问题】速度由30多秒(我的老爷机)提高到2秒以内


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

主题:abcdzabcdz 的【转换遇到问题】速度由30多秒(我的老爷机)提高到2秒以内

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
abcdzabcdz 的【转换遇到问题】速度由30多秒(我的老爷机)提高到2秒以内  发帖心情 Post By:2009/12/14 13:59:00 [只看该作者]

原 附件在 http://www.foxtable.com/dispbbs.asp?boardid=2&Id=5469 中,只是顺序有所不同:
DataTables("课时名单").DataRows.Clear()
dim x as string
for i as integer = 1 to tables("课程表").cols.count -1
    x = x & "|" & tables("课程表").cols(i).name
    dim f As New Filler
    f.SourceTable = DataTables("课程表") '指定数据来源
    f.SourceCols = "" & tables("课程表").cols(i).name & "" '指定数据来源列
    f.DataTable = DataTables("课时名单") '指定数据接收表
    f.DataCols = "姓名" '指定数据接收列
    f.Distinct = false
    f.Fill() '填充数据
next
x=x.trim("|")
dim n as integer = tables("课程表").cols.count /x.split("|").length
for xi as integer = 0 to x.split("|").length-1
    for ii as integer = xi*tables("课程表").rows.count to xi*tables("课程表").rows.count+tables("课程表").rows.count-1
        tables("课时名单").rows(ii)("星期") = x.split("|")(xi).split("_")(0)
        tables("课时名单").rows(ii)("计分") = 1
    next
next
Messagebox.Show("处理完毕!")


原代码主要是慢在:
...................
                Dim drmd As DataRow
                drmd = DataTables("课时名单").DataRows.AddNew()    ‘今后增加行数多时,尽量少用addnew!~
........................
只要代码合理,老爷机不是问题~  估计c版的机子会在1秒以内的。
[此贴子已经被作者于2009-12-14 14:12:19编辑过]

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/12/14 14:13:00 [只看该作者]

drmd = DataTables("课时名单").DataRows.AddNew()    ‘今后增加行数多时,尽量少用addnew!
有同感,用addnew()增加多行确实很慢,如果是SQL Table表增加行时应如何处理?用什么方法可以提高到速度呢?谢谢!

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/12/14 14:18:00 [只看该作者]

以下是引用baoxyang在2009-12-14 14:13:00的发言:
drmd = DataTables("课时名单").DataRows.AddNew()    ‘今后增加行数多时,尽量少用addnew!
有同感,用addnew()增加多行确实很慢,如果是SQL Table表增加行时应如何处理?用什么方法可以提高到速度呢?谢谢!

用充填 配合 在被充填表中 for。。。next 计算比较快~ 


 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/12/14 15:23:00 [只看该作者]

神奇的代码

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/12/14 15:26:00 [只看该作者]

以下是引用狐狸爸爸在2009-12-14 15:23:00的发言:
神奇的代码

老大,楼主使用方法有提高速度有疑问吗


 回到顶部
帅哥,在线噢!
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/12/14 15:32:00 [只看该作者]

以下是引用baoxyang在2009-12-14 15:26:00的发言:

老大,楼主使用方法有提高速度有疑问吗


代码无定式,高效好理解就行


 回到顶部
帅哥,在线噢!
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251397 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/12/14 15:35:00 [只看该作者]

应该不是AddNew的问题。
批量处理应该用上Redraw

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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/12/14 15:38:00 [只看该作者]

请教下楼主,如果从EXCEL表中的数据导入表中无有好方法提高速度,是用代码编写的,使用AddNew() 来实现的。没有找到好方法。

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


加好友 发短信 一级勋章
等级:MVP荣誉狐 帖子:5154 积分:31434 威望:0 精华:8 注册:2008/9/8 12:27:00
  发帖心情 Post By:2009/12/14 16:00:00 [只看该作者]

以下是引用狐狸爸爸在2009-12-14 15:35:00的发言:
应该不是AddNew的问题。
批量处理应该用上Redraw

这个有效果,但是用原有c版的代码也要5、6秒时间,和俺1楼代码比,还是有2、3倍的差距呀~ 


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


加好友 发短信
等级:狐精 帖子:3313 积分:23146 威望:0 精华:1 注册:2009/3/31 11:25:00
  发帖心情 Post By:2009/12/14 16:28:00 [只看该作者]

用AddNew增加的速度确实较慢,估计增加八十多条记录,需要好几秒时间呀。

 回到顶部
总数 20 1 2 下一页