以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]窗口表导入TXT文件  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=149966)

--  作者:天一生水
--  发布时间:2020/5/16 22:44:00
--  [求助]窗口表导入TXT文件

老师好!

分别在最新的开发版和商业版导入3个TXT文件,共17780行,商业版耗时8.88秒;开发版耗时159.77秒。

测试的数据源是sql本地外部数据源,环境、代码完全相同,为什么差异这么大?

尝试过重装开发版、删除项目Bin文件夹,压缩项目等,没有改善。这种情况可能是哪里的原因?

谢谢!

 

代码:

\'\'\'
Dim cn As Integer = 0   \'预设导入文件个数
Dim count As Integer = 0   \'导入总数
Dim str As String = ""    \'股票名预设
Dim p As WinForm.ProgressBar    \'进度条预设
p = e.Form.Controls("ProgressBar1")


Tables("指数日线").StopRedraw()

Dim dlg As New OpenFileDialog
dlg.Filter = "TXT文件|*.TXT"
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.Ok Then
   count = dlg.FileNames.Length    \'导入个数
p.Minimum = 0
p.Maximum = count
p.Value = 0

  
    Dim dt As Date = Date.Now
    For Each file As String In dlg.FileNames
        cn +=1  \'文件个数
       
        e.Form.Controls("Label3").text = "正在导入第  " & cn & "/" & count & "  只股票:" & vbcrlf & FileSys.GetName(file)
        e.Form.Controls("Label进度条百分比").text = Format(cn/count ,"Percent")
        p.Value =  cn
        Application.DoEvents  \'代码即刻生效----耗时
               
        Dim strs As String = FileSys.ReadAllText(file)
        strs = strs.Trim().Replace(" ", ",").Replace(vbtab, ",").Replace(vblf,"")   
        Dim name As String = FileSys.GetName(file.SubString(0, file.length - 4))
        Dim dr1 As DataRow = DataTables("自选股").Find("代码 = \'" & name & "\'")
        Dim rs() As String = strs.Split(vbcr)

        For i As Integer = 0 To rs.Length - 2
            Dim cs() As String = rs(i).Split(",")
            Dim dr As DataRow = DataTables("指数日线").Addnew()
            dr("代码") = name
            If dr1 Is Nothing Then
                dr("名称") = name
            Else
                dr("名称") = dr1("名称")
            End If
            dr("日期") = cs(0)
            dr("开盘价") = cs(1)
            dr("最高价") = cs(2)
            dr("最低价") = cs(3)
            dr("收盘价") = cs(4)
            dr("成交量") = cs(5)
            dr("金额") = cs(6)
        Next

        GC.Collect  \'释放内存
    Next

    Dim tp As TimeSpan    \'计算耗时
    tp = Date.Now - dt
    e.Form.Controls("Label3").text = "正在导入  " & cn & "  只股票," & "耗时  " & tp.TotalSeconds
   
End If

Tables("指数日线").ResumeRedraw()

msgbox("导入结束")

 

[此贴子已经被作者于2020/5/17 21:13:50编辑过]

--  作者:有点蓝
--  发布时间:2020/5/17 18:49:00
--  
请把开发版和商业版的例子发上来测试
--  作者:天一生水
--  发布时间:2020/5/17 21:13:00
--  
蓝老师,找到原因了,如果接受导入的表作为窗口副本表,就非常慢,这是什么原因?
--  作者:天一生水
--  发布时间:2020/5/17 21:26:00
--  

 


以下内容是专门发给有点蓝浏览



--  作者:有点蓝
--  发布时间:2020/5/17 22:07:00
--  
1、副本窗口
Tables("指数日线").StopRedraw()
改为
Tables("指数日线-作副本表-慢_table1").StopRedraw()

2、下面这句代码被注释掉了,所以不会保存。ExecuteXXX是用来执行sql的,不调用就不会执行
\'Count += cmd.ExecuteNonQuery()


--  作者:天一生水
--  发布时间:2020/5/18 14:39:00
--  
谢谢蓝老师!
我把上面两处改过来了,但是保存的时间为什么比用save保存的还慢。麻烦老师再给看一下代码。谢谢!


以下内容是专门发给有点蓝浏览



--  作者:有点蓝
--  发布时间:2020/5/18 14:58:00
--  
内部表直接save即可,不要使用sql增删改数据
--  作者:天一生水
--  发布时间:2020/5/18 15:10:00
--  
实际是在sql外部表使用的,因为数据在数千万行的级别,所以请老师看看是不是代码有问题?


--  作者:有点蓝
--  发布时间:2020/5/18 15:15:00
--  
SqlServer数据库用这种:http://foxtable.com/bbs/dispbbs.asp?boardid=2&Id=147288
[此贴子已经被作者于2020/5/18 15:15:38编辑过]