关于vb程序速度优化问题,急!

Tab609 2013-06-26 08:49:54
大家好!我按网上所说的优化方法(优化代码)去优化vb程序http://tieba.baidu.com/p/293365809#,可一直不见效(效果不明显),程序的运行速度还是跟优化前一样,请问各位大神该如何优化vb程序,从而提高程序的运行速度。谢谢!
...全文
380 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2013-06-26
  • 打赏
  • 举报
回复
VB 的 Timer() 函数返回从午夜开始到现在经过的秒数(带两位小数),一个步骤前后各调用一次,差值就是耗时。
Tab609 2013-06-26
  • 打赏
  • 举报
回复
@zhao4zhong1 硬件设备都相同(同一台电脑),我的程序与公司原来的程序存在接近1秒的时间差,所以我的程序有很大的优化空间,升级CPU或硬盘这个不太可能,我想从程序代码方面提高程序运行速度,求请教!
Tab609 2013-06-26
  • 打赏
  • 举报
回复
怎么让统计各步骤或过程的耗时啊?
赵4老师 2013-06-26
  • 打赏
  • 举报
回复
升级CPU或硬盘试试。
Tiger_Zhao 2013-06-26
  • 打赏
  • 举报
回复
统计各个步骤的耗时,对最耗时的几个过程进行优化。
20个数平均这种毫秒级都没有的过程就没必要优化了。
Tab609 2013-06-26
  • 打赏
  • 举报
回复
是这样的,我做的vb程序用于测试公司的产品是否合格,现在每根耗时大约4秒,公司之前的程序每根3秒多,所以我做的程序还是有很大的优化空间,但又不懂怎么去优化代码,让程序运行速度快点,节约时间提高生产效率。
Tiger_Zhao 2013-06-26
  • 打赏
  • 举报
回复
你现在一个算法耗时多少?微秒级还是毫秒级?优化有什么意义!
Tab609 2013-06-26
  • 打赏
  • 举报
回复
请问Tiger_Zhao 时间上我该怎么样优化,谢谢!
Tab609 2013-06-26
  • 打赏
  • 举报
回复
程序里用到的算法都很简单,比如求20个数中的最大、最小值和平均值之类的。我现在用的是先假设a(0)最大,然后逐一与后面的数比较,从而求出最大值,最小值也类似的方法求。请问能有其它较优的算法吗?在线等,谢谢!
Tiger_Zhao 2013-06-26
  • 打赏
  • 举报
回复
程序性能常用衡量指标是时间和空间。
你给的链接中的方法主要是对空间的“优化”(其实只是一般的编程准则)。
worldy 2013-06-26
  • 打赏
  • 举报
回复
主要优化算法,去除没必要的操作,大循环中减少如a.b.c的运算。。。诸如此类
Tab609 2013-06-26
  • 打赏
  • 举报
回复
程序中的主要算法如下:

'*************************************************
'function   :Data Calcuration
'               Valu.AveGaik(Valu.MaxGaik, Valu.MinGaik)
'               Valu.MaxFure
'               Valu.Entdo
'               Valu.Result
'parameter  :non
'result     :true=OK   false=NG
'*************************************************
Private Function uflCalc()
    Dim i, hed As Integer
    Dim RestFg As Boolean
    RestFg = True
     
    '--- Base Calcuration
    For hed = 1 To 3
        '--- 外径平均值计算
        Dim AveGaik As Double
        AveGaik = 0
        For i = 1 To Spec(0).Point
            AveGaik = AveGaik + Inpt(hed).Gaik(i)
        Next
        
        If AveGaik > 0 Then
            Valu.AveGaik(hed) = ufgChgValu(AveGaik / Spec(0).Point)
        Else
            Valu.AveGaik(hed) = 0
        End If
        
        '--- 外径 Data Error Check
        If Valu.AveGaik(hed) = 0 Then
            RestFg = False
            Valu.Result(hed) = "MISS"
        End If
        
        '--- 外径最大值,最小值,圆筒度计算
        Valu.MaxGaik(hed) = 0
        Valu.MinGaik(hed) = 999999
        For i = 1 To Spec(0).Point
            If Valu.MaxGaik(hed) < Inpt(hed).Gaik(i) Then Valu.MaxGaik(hed) = ufgChgValu(Inpt(hed).Gaik(i))
            If Valu.MinGaik(hed) > Inpt(hed).Gaik(i) Then Valu.MinGaik(hed) = ufgChgValu(Inpt(hed).Gaik(i))
        Next
        Valu.Entdo(hed) = ufgChgValu(Valu.MaxGaik(hed) - Valu.MinGaik(hed))

        '--- 偏心最大值,最小值计算
        Dim MaxFure, MinFure As Double
        MaxFure = 0
        MinFure = 999999
        For i = 1 To Spec(0).Point
            If MaxFure < Inpt(hed).Fure(i) Then MaxFure = Inpt(hed).Fure(i)
            If MinFure > Inpt(hed).Fure(i) Then MinFure = Inpt(hed).Fure(i)
        Next
        Valu.MaxFure(hed) = ufgChgValu(MaxFure - MinFure)
    
        '--- 偏心 Data Error Check
        If (MaxFure - MinFure) = 0 Then
            RestFg = False
            Valu.Result(hed) = "MISS"
        End If
    Next

    '--- All Data Miss Check
    If RestFg = False Then
        uflCalc = False
    Else
        uflCalc = True
    End If
End Function

'*************************************************
'function   :外径差 Calcuration
'parameter  :ValuDt() = CalcData
'           :dn = DataNum
'result     :value
'*************************************************
Private Function uflCalcSa(ValuDt(), dn)
    Dim i As Integer
    Dim MaxDt, MinDt
    MaxDt = 0
    MinDt = 999999
    For i = 0 To dn - 1
        If MaxDt < ValuDt(i) Then MaxDt = ValuDt(i)
        If MinDt > ValuDt(i) Then MinDt = ValuDt(i)
    Next
    uflCalcSa = ufgChgValu(MaxDt - MinDt)
End Function
worldy 2013-06-26
  • 打赏
  • 举报
回复
mDif = Sqr(mDif) / i 这个也错了,呵呵,改为 mDif = Sqr(mDif/ i )
worldy 2013-06-26
  • 打赏
  • 举报
回复
mDif = mDif + A(i) * A(0) 错了,应 改为 mDif = mDif + A(i) * A(i)
worldy 2013-06-26
  • 打赏
  • 举报
回复
引用 3 楼 luckytanggu 的回复:
程序里用到的算法都很简单,比如求20个数中的最大、最小值和平均值之类的。我现在用的是先假设a(0)最大,然后逐一与后面的数比较,从而求出最大值,最小值也类似的方法求。请问能有其它较优的算法吗?在线等,谢谢!
不知道lZ用了什么高级算法,那么能耗时:
Private Sub Command1_Click()
    Dim A() As Double
    Dim n As Long
    Dim i As Long
    
    Randomize
    
    n = Val(Text1)
    
    ReDim A(n)
    For i = 0 To n
        A(i) = 30 + Rnd * 100
    Next
    
    Dim mMax As Double
    Dim mMin As Double
    Dim mSum As Double
    Dim mAvg As Double
    Dim t0 As Long
    Dim mDif As Long
    
    t0 = GetTickCount
    For i = 0 To n
        If mMax < A(i) Then mMax = A(i)
        If mMin > A(i) Then mMin = A(i)
        mSum = mSum + A(i)
        mDif = mDif + A(i) * A(0)
    Next
    
    mAvg = mSum / i
    mDif = Sqr(mDif) / i
    
    Debug.Print "最大值=" & mMax & vbCrLf & "最小值=" & mMin & vbCrLf & "平均值=" & mAvg & vbCrLf & "均方根=" & mDif & vbCrLf & "耗时" & (GetTickCount - t0) & "(毫秒)"
    
End Sub
text1输入100000(十万)的运算结果: 最大值=129.998712539673 最小值=0 平均值=80.1427986230473 均方根=0 耗时16(毫秒)
熊孩子开学喽 2013-06-26
  • 打赏
  • 举报
回复
这个只是说了一些最基本的东西, 但是实际的程序还是要具体分析的. 很多时候并非仅仅是语言细节和技巧上的优化, 而是整个解决思路上的优化, 相比那些语言细节上的东西, 思路上的优化则可能带来翻天覆地的效率提升. 所以说到底还最终考究的还是头脑和经验
  • 打赏
  • 举报
回复
你先说一下。你一次比较要有多少项。分别是什么?最好将比较的代码秀上来看一下。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧