Foxtable(狐表)用户栏目专家坐堂 → 增加多行耗时长的问题


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

主题:增加多行耗时长的问题

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


加好友 发短信
等级:童狐 帖子:214 积分:2133 威望:0 精华:0 注册:2018/3/30 19:56:00
增加多行耗时长的问题  发帖心情 Post By:2024/9/10 8:30:00 [只看该作者]

老师您好,写了个增加多行的程序,但是运行速度不敢恭维,代码如下:
Dim strt As Integer
Dim st As Date = Date.Now '将开始时间保存在变量st中
InputValue(strt, "增加行", "突破增加300行限制")
currenttable.StopRedraw()
CurrentTable.addnew(strt)
CurrentTable.ResumeRedraw()
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

初步测算了下,增加2000行耗时52.6秒,这个速度还是很慢啊,怎样优化一下,让速度更快?

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


加好友 发短信
等级:狐精 帖子:3202 积分:21279 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2024/9/10 8:51:00 [只看该作者]

不应该啊,我测试3000行不到1秒的速度,怎么会慢,是有其他代码影响了
10000行,0.22秒

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

[此贴子已经被作者于2024/9/10 8:53:01编辑过]

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


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/10 8:58:00 [只看该作者]

我测试5000行才0.16秒。应该从输入后开始计时呀,不然等1个小时后再输入行数,那不更久,这不合理的

Dim strt As Integer
InputValue(strt, "增加行", "突破增加300行限制")
Dim st As Date = Date.Now '将开始时间保存在变量st中
currenttable.StopRedraw()
CurrentTable.addnew(strt)
CurrentTable.ResumeRedraw()
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


加好友 发短信
等级:童狐 帖子:214 积分:2133 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2024/9/10 11:08:00 [只看该作者]

图片点击可在新窗口打开查看
第二次测试仍然有46秒,这是哪里除了问题吗?电脑配置是Intel(R) Core(TM) i5-10400 CPU @ 2.90GHz   2.90 GHz,内存16G的速度应该可以的 

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


加好友 发短信
等级:童狐 帖子:214 积分:2133 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2024/9/10 14:10:00 [只看该作者]

跟数据库有关系吗?我用的是sql 2012数据库

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


加好友 发短信
等级:狐精 帖子:3202 积分:21279 威望:0 精华:0 注册:2016/3/28 16:57:00
  发帖心情 Post By:2024/9/10 14:25:00 [只看该作者]

和数据库没关系吧,我用的还是2008,在说currenttable都是当前表,没有保存数据,不可能那么长时间,你排查一下看看有没其他代码影响了速度。

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


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/10 14:26:00 [只看该作者]

那就是这个表格有表达式列,或者是事件代码影响了

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


加好友 发短信
等级:童狐 帖子:214 积分:2133 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2024/9/10 14:45:00 [只看该作者]

排查了下,我在datarowadded 事件中 增加了这个代码,因为这个代码的影响吗?       
 If e.DataTable.Name.Contains("原始报价") and e.DataTable.DataCols.Contains("船名") Then
            e.DataRow("船名") = "新"
        End If

有什么好方法改进吗?

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


加好友 发短信
等级:超级版主 帖子:110443 积分:562081 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/9/10 15:54:00 [只看该作者]

把这个表所有代码备份,然后去掉测试就知道是不是这些个代码影响的了。

试试屏蔽事件

Dim strt As Integer
InputValue(strt, "增加行", "突破增加300行限制")
Dim st As Date = Date.Now '将开始时间保存在变量st中
currenttable.StopRedraw()
SystemReady = False
dim max as integer = CurrentTable.compute("max(_identify)")
CurrentTable.addnew(strt)
if CurrentTable.Cols.Contains("船名") then
CurrentTable.datatable.replacefor("船名","新","_identify >" & max )
end if
SystemReady = true
CurrentTable.ResumeRedraw()
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

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


加好友 发短信
等级:童狐 帖子:214 积分:2133 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2024/9/10 17:00:00 [只看该作者]

问题完美解决啊。复制这段代码运行起来 0.2s 就完成了

Dim strt As Integer
InputValue(strt, "增加行", "突破增加300行限制")
Dim st As Date = Date.Now '将开始时间保存在变量st中
currenttable.StopRedraw()
SystemReady = False
Dim max As Integer = CurrentTable.compute("max(_identify)")
CurrentTable.addnew(strt)
If CurrentTable.Cols.Contains("船名") Then
CurrentTable.DataTable.replacefor("船名", "新", "_identify >" & max)

End If
SystemReady = True
CurrentTable.ResumeRedraw()
MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒")

另外还有个小问题。我这边还有个表达式影响的列,存在一个序号列,本意是新增加一个行就给出一个编号,编号增量为1
如果要保持这种功能的话,我这个代码应该怎么修改一下呢?

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