以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教运行效率问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=41166) |
||||
-- 作者:sxqq123 -- 发布时间: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 请教大师对上述既遍历行又扁历列的情况如何修改以提高运行效率,谢谢。 |
||||
-- 作者:有点甜 -- 发布时间:2013/10/12 20:18:00 -- 试试用filler |
||||
-- 作者:yan2006l -- 发布时间:2013/10/12 20:30:00 -- 有工具不用,非要手工编码,用了手工编码,就别谈什么效率了。你那编码已经是手工编码里面最简洁的了!!!! |
||||
-- 作者:sunsenfeng -- 发布时间:2013/10/12 20:38:00 -- 如果确实要这样行列取值,还是先获得表的行数,定义数组,然后将A表数据读入数组,然后再写入B表,用Excel我有过经验,不会超过1秒 |
||||
-- 作者:sxqq123 -- 发布时间:2013/10/12 20:46:00 --
Dim f As New Filler |
||||
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2013/10/12 22:17:00 --
5000行数据复制大约0.2秒
|
||||
-- 作者:有点甜 -- 发布时间:2013/10/12 22:25:00 -- 我测试7楼的例子,直接复制,也是只要1秒左右的时间。 |