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


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

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

帅哥哟,离线,有人找我吗?
狐狸爸爸
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

Tables("表A").AddNew(80)

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


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

以下是引用baoxyang在2009-12-14 16:28:00的发言:
用AddNew增加的速度确实较慢,估计增加八十多条记录,需要好几秒时间呀。

看7楼的方法!  好像没那么严重吧,1楼的连接附件增加九千多条,用上Redraw后也就5、6秒啊! 11楼狐爸的就更快了——瞬间! 

做个例子上来看看~  

[此贴子已经被作者于2009-12-14 16:54:00编辑过]

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


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2009/12/14 18:54:00 [只看该作者]

真神奇!!!    由于涉及到函数较多,关系较复杂,mr725能否在1楼加上注解,以方便学习.谢谢!

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/14 19:16:00 [只看该作者]

楼主厉害!

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33945 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2009/12/14 19:21:00 [只看该作者]

学一个。
在楼主的基础上再减0.1~0.2秒。

Dim s As Date = Date.Now()
DataTables("课时名单").DataRows.Clear()
Dim Values() As String
Dim n As Integer = Tables("课程表").rows.count
Dim n1 As Integer
for Each dc as Datacol in DataTables("课程表").Datacols
    n1 = n1 +1
    dim f As New Filler
    f.SourceTable = DataTables("课程表") '指定数据来源
    f.SourceCols = dc.name '指定数据来源列
    f.DataTable = DataTables("课时名单") '指定数据接收表
    f.DataCols = "姓名" '指定数据接收列
    f.Distinct = false
    f.Fill() '填充数据
    Values = dc.name.split("_")
    For i As integer = (n*n1)-n to Tables("课时名单").rows.count -1
        Tables("课时名单").Rows(i)("星期") = Values(0)
        Tables("课时名单").Rows(i)("计分") = 1
    Next
Next
Messagebox.Show("处理完毕! 耗时: " & (Date.Now -s).TotalSeconds)

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


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2009/12/14 19:44:00 [只看该作者]

太厉害了,两位版主!!!

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


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

哈哈~   还是c 版的代码巧妙啊,这一段:
    For i As integer = (n*n1)-n to Tables("课时名单").rows.count -1
        Tables("课时名单").Rows(i)("星期") = Values(0)
        Tables("课时名单").Rows(i)("计分") = 1
    Next
我一直想放在它外层的 For  .......Next 里面去,老是没实现,只好搁在它外面了。 

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


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

以下是引用abcdzabcdz在2009-12-14 18:54:00的发言:
真神奇!!!    由于涉及到函数较多,关系较复杂,mr725能否在1楼加上注解,以方便学习.谢谢!

还是把C版的15楼的代码加两处注解(我也在学说的不一定好):
Dim s As Date = Date.Now()           
DataTables("课时名单").DataRows.Clear()          
Dim AValue() as String      
Dim n As Integer = Tables("课程表").rows.count
Dim n1 As Integer
for Each dc as Datacol in DataTables("课程表").Datacols
    n1 = n1 +1
    dim f As New Filler
    f.SourceTable = DataTables("课程表") '指定数据来源
    f.SourceCols = dc.name '指定数据来源列
    f.DataTable = DataTables("课时名单") '指定数据接收表
    f.DataCols = "姓名" '指定数据接收列
    f.Distinct = false
    f.Fill() '填充数据                   
'上面这是填充数据:将课程每一列填充到课时名单表的姓名列,
    Values = dc.name.split("_")
    For i As integer = (n*n1)-n to Tables("课时名单").rows.count -1
        Tables("课时名单").Rows(i)("星期") = Values(0)
        Tables("课时名单").Rows(i)("计分") = 1
    Next
'上面这一段,是在课时名单表中,对每填充的课时表一列的对应的 星期 计 两列进行计算并赋值....  注意这个(n*n1)-n 始终是从本次填充的第一行(也就是当前课时名单表现在的倒数第Tables("课时名单").rows.count行开始循环...
Next
Messagebox.Show("处理完毕! 耗时: " & (Date.Now -s).TotalSeconds)



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


加好友 发短信
等级:小狐 帖子:324 积分:3807 威望:0 精华:0 注册:2008/9/1 7:34:00
  发帖心情 Post By:2009/12/15 19:15:00 [只看该作者]

谢谢mr725的指点!! "这个(n*n1)-n 始终是从本次填充的第一行(也就是当前课时名单表现在的倒数第Tables("课时名单").rows.count行开始循环..."正是理解czy老师程序的难点所有.
    你的下列设计我至今不明其意:
.........................
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
.................

[此贴子已经被作者于2009-12-15 22:05:06编辑过]

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


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

哈哈~  这一条多余了,可以删除的:  【dim n as integer = tables("课程表").cols.count /x.split("|").length】

其他:::::::
x.split("|").length  
  是课程表需要用来充填的列数(共60列吧)~  每一列都要充填一次到课时名单表的.
tables("课程表").rows.count  
不就是课程表的行数(99行)吗. 所以:
 xi*tables("课程表").rows.count to xi*tables("课程表").rows.count+tables("课程表").rows.count-1  表示每一次都从这一行开始到由此计算99行为止(既:1-99行、100-198行、199-297行.......)

不知我说明白了没有啊~ 

[此贴子已经被作者于2009-12-15 23:50:31编辑过]

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