首页
社区
课程
招聘
[求助]VB语言,怎么样才能提高运算速度?
2015-7-5 10:51 5180

[求助]VB语言,怎么样才能提高运算速度?

2015-7-5 10:51
5180
http://yunpan.cn/cQi5RWEgvhTcy (提取码:bcc2) 软件源码

http://37353b.l71.yunpan.cn/lk/cQNH9m7ZCbUPL( 提取码:782b)  需要验证的原数据

大底1放在文本框1,,大底2放在文本框2,

处理的是2000条左右的数据,但是会出现卡死。。。大牛我错吗。。。求指点啊啊!!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (15)
雪    币: 96
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
xiaohouhui 1 2015-7-5 10:59
2
0
不是语言的问题,是算法的问题
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 11:14
3
0
是啊,由于是新手,所以也只能写成这样了。。。求指点呀
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 11:16
4
0
因为是新手,所以只能写成这样,求带。。。
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ntDownload 2015-7-5 11:29
5
0
把代码贴出来啊

还要把思路写出来,
高手们很懒的,你要是偷懒,他们只会比你更懒,都懒得看你 的帖子~
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 11:45
6
0
Option Explicit
Private Sub Picture1_Click()
Form1.WindowState = 1
End Sub
Private Sub Command1_Click()
Text1.Text = ""
End Sub
Private Sub Command3_Click()
RichTextBox1.Text = ""
End Sub
Private Sub Command4_Click()
Text2.Text = ""
End Sub

Private Sub Command2_Click()
'检验
    RichTextBox1.Text = ""
    Dim count1 As Long, count2 As Long 'count1对的次数,count2错的次数
    Dim ary1, ary2 '存放分割后的数组
   
    If Text1 = "" Or Text2 = "" Then Exit Sub
   
    Text1.Text = Replace(Replace(Text1.Text, ",", vbCrLf), " ", vbCrLf)
    ary1 = Split(Text1.Text, vbCrLf)
    Label8.Caption = UBound(ary1) + 1
   
    Text2.Text = Replace(Replace(Text2.Text, ",", vbCrLf), " ", vbCrLf)
    ary2 = Split(Text2.Text, vbCrLf)
    Label9.Caption = UBound(ary2) + 1
   
    Dim i, j
    For i = 0 To UBound(ary2)
   
        Dim ok
        ok = False
        For j = 0 To UBound(ary1)
            If ary2(i) = ary1(j) Then
                ok = True
                Exit For
            End If
        Next
        
        If ok = True Then
            RichTextBox1.SelStart = Len(RichTextBox1.Text)
            RichTextBox1.SelText = ary2(i) & vbTab & "正确" & vbCrLf
            count1 = count1 + 1
        Else
            RichTextBox1.SelStart = Len(RichTextBox1.Text)
            RichTextBox1.SelColor = vbRed
            RichTextBox1.SelText = ary2(i) & vbTab & "错误" & vbCrLf
            RichTextBox1.SelColor = vbBlack
            count2 = count2 + 1
        End If
    Next
   
    Label2 = count1
    Label4 = count2

End Sub

Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = vbCtrlMask Then
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End If
End Sub
Private Sub Text2_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyA And Shift = vbCtrlMask Then
Text2.SelStart = 0
Text2.SelLength = Len(Text2)
End If
End Sub
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linyifeng 2015-7-5 12:03
7
0
hash表匹配。不然循环嵌套循环,快等于数据的次方了。另外,处理的时候,隐藏控件看看。
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ntDownload 2015-7-5 12:13
8
0
直接用正则表达式就可以了
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 12:33
9
0
能直接帮忙修改一下代码么,新手哪会那么多呀,大牛。。。
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ntDownload 2015-7-5 13:04
10
0
Sub TextComp()
    Const sTxt1$ = "abc,efg,ijk,lmn"
    Const sTxt2$ = "abc,efg,lmn,opq,xyz,998"

    Dim sPat$, i&
    sPat = Replace(sTxt1, ",", "|")

    Dim oRE As New RegExp ' 引用 Microsoft VBScript Regular Expressions 5.5
    With oRE
        .Global = True
        .Pattern = sPat
        With .Execute(sTxt2)
            Debug.Print "正确次数:" & .Count
            For i = 0 To .Count - 1
                Debug.Print .Item(i) ' 依次输出 正确的内容
            Next
        End With
    End With

End Sub

==========
给你个栗子
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 15:48
11
0
我不是松鼠,不吃栗子。。。。大大
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
无聊的菜鸟 9 2015-7-5 21:44
12
0
目测一下,你的目的是判断“大底2”里面的数字是否在“大底1”里面存在是吧?
然后“大底1”与“大底2”的数字均为4位数。
再来,看见你有Split(Text1.Text, vbCrLf),可假设文件内每行一个数字,之后换行才是下一个数字
故而
Option Explicit
dim ary(10000) as long
dim i as long
dim intStr as string

for i=1 to 10000
   ary(i)=0
next

Open "大底1.txt" For Input As #1
Do While Not EOF(1)
  Line Input #1, intStr
  ary(val(intStr)) = 1
Loop
Close #1

Open "大底2.txt" For Input As #1
Do While Not EOF(1)
  Line Input #1, intStr
  ary(val(intStr)) = ary(val(intStr)) +1
Loop
Close #1

for i=1 to 10000
   if ary(i)>0 then
     txtResult = txtResult + str(i) + vbLFCR //i为大底1内与大底2内相同的数的值
next

差不多了吧,vb真蛋疼。。算法复杂度应该是2n+m?。。。
雪    币: 10829
活跃值: (2679)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
menglv 2015-7-5 22:39
13
0
其实这不是vb的问题,你这么写,vc也快不了。我只能说,变量是需要声明的,循环内不要老调用控件属性,粗略看了一下,好像是查找关键词出现的位置。
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-5 22:42
14
0
好吧,谢谢各位大牛了~~~

是真的不怎么会!

初学者,看到那么多有点晕菜
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
湛江晓燕 2015-7-6 14:28
15
0
能直接改我的代码么。。。我实在不会啊,大牛。。。。。。你都蛋疼了,我就..........
雪    币: 631
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linyifeng 2015-7-8 11:59
16
0
hash 有开源模块.
控件隐藏可以提高循环处理速度.
方法   .visable = false
游客
登录 | 注册 方可回帖
返回