我正在开发一款可以工作数天的应用程序并实现一个每隔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
非常感谢