以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 问个新增行赋值效率的问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=190125) |
-- 作者:晕了快扶我 -- 发布时间:2024/1/18 6:04:00 -- 问个新增行赋值效率的问题 Dim crs As New List(Of DataRow) For Each dr As DataRow In DataTables("包厢号表").DataRows Dim cr As DataRow = DataTables("前台订房表").Find("包厢号=\'" & dr("房号") & "\'") If cr Is Nothing Then crs.Add(dr) End If Next Dim st As Date = Date.Now \'要测试耗时的代码 Systemready = False DataTables("前台订房表").StopRedraw For Each dr As DataRow In crs Dim vr As DataRow = DataTables("前台订房表").AddNew vr("SysId") = Functions.Execute("数据表编号", "前台订房表") vr("营业日期") = yyrq vr("包厢号") = dr("房号") vr("状态") = "空房" Next DataTables("前台订房表").ResumeRedraw DataTables("前台订房表").Save Systemready = True MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") 蓝色代码增加45行数据,就要12秒多,有啥办法可以优化吗? |
-- 作者:有点蓝 -- 发布时间:2024/1/18 8:53:00 -- 测试一下: 1、去掉保存的代码,看看要多长时间 2、直接给id取一个固定值(比如vr("SysId") = 1),测试要多长时间 3、有没有表达式列影响?http://www.foxtable.com/webhelp/topics/1935.htm
|
-- 作者:晕了快扶我 -- 发布时间:2024/1/18 14:34:00 -- 蓝版,查了下,是 Functions.Execute("数据表编号", "前台订房表") 这个函数的问题,函数代码在下面,这个要怎么优化呢? Dim bm As String = args(0) Dim cmd As New SQLCommand cmd.C cmd.CommandText = "s elect * from {编码表}" Dim dt As DataTable = cmd.ExecuteReader(True) Dim dr As DataRow = dt.Find("表名 =\'" & bm & "\'") If dr IsNot Nothing Then If Date.Today > dr("日期") Then \'如果今天的日子大于存在表格里的日期 dr("日期") = Date.Today dr("序号") = 0 Else dr("序号") = dr("序号") + 1 \'如果和今天的日子一样,则序号+1 End If Dim s As String = dr("前缀名") + Format(Date.Today, "yyMMdd") + Format(dr("序号"), "0000") dr.Save Return(s) End If |
-- 作者:有点蓝 -- 发布时间:2024/1/18 14:45:00 -- 方法1、另外建一个函数,一次性返回多个编号,大概 Dim bm As String = args(0) Dim 行数 As integer = args(1) Dim cmd As New SQLCommand cmd.C cmd.CommandText = "s elect * from {编码表}" Dim dt As DataTable = cmd.ExecuteReader(True) Dim dr As DataRow = dt.Find("表名 =\'" & bm & "\'") If dr IsNot Nothing Then If Date.Today > dr("日期") Then \'如果今天的日子大于存在表格里的日期 dr("日期") = Date.Today dr("序号") = 行数 Else dr("序号") = dr("序号") + 行数 \'如果和今天的日子一样,则序号+1 End If dr.Save Return(dr("序号") + 1) End If ----------- …… DataTables("前台订房表").StopRedraw dim 编号索引 as integer = Functions.Execute("数据表编号2", "前台订房表",crs.count) For Each dr As DataRow In crs Dim vr As DataRow = DataTables("前台订房表").AddNew vr("SysId") = dr("前缀名") + Format(Date.Today, "yyMMdd") + Format(编号索引, "0000") 编号索引 = 编号索引 + 1 vr("营业日期") = yyrq …… |
-- 作者:晕了快扶我 -- 发布时间:2024/1/18 14:49:00 -- 大概懂了,谢谢蓝版 |