以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 一次性删除表中所有行的代码优化 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=14991) |
-- 作者:小猪鑫鑫 -- 发布时间:2011/12/9 10:38:00 -- 一次性删除表中所有行的代码优化 狐爸及各位狐狸朋友们,大家好!对于一次性删除表中的所有行的代码,有好几种方法,但所用时间都各有不同,现针对系统自带的学习文件《代码优化》项目中的“表A”里10000行来测试,我想到了三种方式,所用时间相差很大,现转给大家参考 第一种: Dim sj As Date =Date.now For Each dr As DataRow In DataTables("A").DataRows For i As Integer =Tables("A").Rows.count-1 To 0 Step -1 DataTables("A").DataRows(i).delete Next Next output.show((Date.now-sj).Totalseconds) 需时56.92秒 第二种: Dim sj As Date =Date.now DataTables("A").deletefor("项目 is not null") output.show((Date.now-sj).Totalseconds) 需时3.625秒 第三种: Dim sj As Date =Date.now With Tables("A") .Select(0, 0, .Rows.Count - 1, .Cols.Count - 1) End With Syscmd.Row.delete() output.show((Date.now-sj).Totalseconds) 需时0.59秒 对于第三种情况,系统会弹出一个对话框,用户需及时“回车”确定,回车的时间决定了反应的速度! 另我想请问狐爸,为什么我加入模拟回车键无效的(sendkeys.send("{enter}"),如果能自动回车,速度会更快,请狐爸指点!
|
-- 作者:狐狸爸爸 -- 发布时间:2011/12/9 11:08:00 -- 最简单的代码: DataTables("A").DataRows.Clear()
另外建议看看这个: http://www.foxtable.com/help/topics/0453.htm
|
-- 作者:小猪鑫鑫 -- 发布时间:2011/12/9 11:17:00 -- 0.406秒,真的很快,谢谢指导! 另不明您要我看上面帮助文件的用处,我是想问当有对话框弹出,我模拟按下回车键(sendkeys.send("{enter}") ,为什么无效? |
-- 作者:狐狸爸爸 -- 发布时间:2011/12/9 11:23:00 -- 1、同样的代码,加上这两行,会提速很多:
Dim sj As Date =Date.now 2、
Dim sj As Date =Date.now |
-- 作者:小猪鑫鑫 -- 发布时间:2011/12/9 11:34:00 -- 狐爸:4楼的第一种方案需7.24秒(不太理想);第二种方案只要0.39秒,真的很强,谢谢 |
-- 作者:狐狸爸爸 -- 发布时间:2011/12/9 11:35:00 -- 从你原来的56秒多到7秒多,已经提速很多了,这个例子是告诉你批量操作的时候要注意什么。 |
-- 作者:小猪鑫鑫 -- 发布时间:2011/12/9 11:37:00 -- 哦,知道了,谢谢 |
-- 作者:hanxuntx -- 发布时间:2011/12/9 11:48:00 -- 不错学习了,谢谢 [此贴子已经被作者于2011-12-9 11:47:43编辑过]
|