VBA计时器api内存使用情况

时间:2014-02-03 11:51:48

标签: excel vba excel-vba timer

我正在开发一款可以工作数天的应用程序并实现一个每隔500毫秒运行一次例程的Timer(来自user32 lib)。问题是每次例程执行时,Excel App所需的内存增加了8KB。

正如我所说,我希望该应用程序可以运行数天,所以有一点是内存消耗太高,应用程序开始太慢。

我在这个和其他地方搜索过一种方法来解决,但我还没有找到解决方案。我读到了关于强制GC但在vba中我无法做到这一点。 ¿有人能给我一些建议吗?

P.d。:谢谢你,抱歉我的英语很差。

编辑:

嗨再次,我使用Timer事件与PLC进行通信并采取相应措施。也许0.5秒是如此短的时间段,代码无法完成例程并且事件正在堆栈中。我想我可以将时间延长到1秒而不会失去性能。

这是我的代码:

API声明

Private Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long

Private Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long

定时活动常规

Private Sub TimerEvent()

    On Error Resume Next
    Hoja1.cmdFecha.Caption = Format(Now, "dd/mm/yy hh:mm:ss")
    Hoja6.Range("I40") = 0
    'Zona Lectura PLC
    Call readFromPLC

    If Hoja6.Range("I40") = 0 Then
        Hoja4.Range("c11") = 1
    Else
        Hoja4.Range("c11") = 0
    End If
    'Zona alarmas
    If Hoja4.Range("C7") <> AlarmaAnterior Then
        ' Interrupcionpo calculo
        AlarmaAnterior = Hoja4.Range("D10")
        If Hoja4.Range("c7") = 0 Then
           Hoja1.Label1.Visible = False
        Else
            'Hoja4.Range("d8") = Hoja4.Range("d8") + 1
            'Call Control
            Call AlarmasNuevo
            Hoja1.Label1.Visible = True
        End If
    End If

    'Zona actuacion


    If Hoja6.Range("d61") <> Hoja6.Range("d62") Then
           Hoja6.Range("d62") = Hoja6.Range("d61")
             Hoja6.Range("d66") = Hoja6.Range("d66") + 1
            Call ControlArchivos
                End If
    If Hoja6.Range("d63") <> Hoja6.Range("c63") Then
        Hoja6.Range("d63") = Hoja6.Range("c63")
        Call ResetContadores
    End If


    If Hoja6.Range("I50") = 0 Then

    ElseIf Hoja6.Range("I49") <> Hoja6.Range("j49") Then
           Hoja6.Range("J49") = Hoja6.Range("i49")
           If Hoja6.Range("I49") <> 0 Then
            Call Medir
            Else
                Call StopAcq
                Sheets("ESCPLC").Range("J58") = 0
                Hoja1.cmdAvisos.Visible = False
            End If

                    End If


    'Zona escritura PLC
    If Hoja6.Range("J57") <> Hoja6.Range("L57") Or Hoja6.Range("J58") <> Hoja6.Range("L58") Or Hoja6.Range("J59") <> Hoja6.Range("L59") Or Hoja6.Range("J60") <> Hoja6.Range("L60") Or Hoja6.Range("J61") <> Hoja6.Range("L61") Then
        Hoja6.Range("L57") = Hoja6.Range("J57")
        Hoja6.Range("L58") = Hoja6.Range("J58")
        Hoja6.Range("L59") = Hoja6.Range("J59")
        Hoja6.Range("L60") = Hoja6.Range("J60")
        Hoja6.Range("L61") = Hoja6.Range("J61")
        Call writeToPLC
    End If 
End Sub

非常感谢

0 个答案:

没有答案