So I am using a 3rd part COM object.
When calling methods within this COM object I get a massive memory leak. I call one method about every 10 to 50ms.
At first I assumed it was the COM object that was the problem, but now I am not so sure because if I do the exact same thing in VB 2005 Express Edition I do not see the memory leak.
I was wondering if I was doing anything wrong. I posted code below.
Here is my PB test code. I kill the program by just ending it in task manager.
Here is in VB 2005 Express code:
When calling methods within this COM object I get a massive memory leak. I call one method about every 10 to 50ms.
At first I assumed it was the COM object that was the problem, but now I am not so sure because if I do the exact same thing in VB 2005 Express Edition I do not see the memory leak.
I was wondering if I was doing anything wrong. I posted code below.
Here is my PB test code. I kill the program by just ending it in task manager.
Code:
#COMPILE EXE ' Class Indentifiers $CLSID_Galil = GUID$("{D70CFDB0-E481-480C-A29C-6F60FC044B38}") $CLSID_Event_Events = GUID$("{0FEFD506-A960-448A-97CD-2DC45FCC2091}") ' Interface Indentifiers $IID_IGalil = GUID$("{F1F88B2C-881A-4D82-9F99-60A84691387D}") $IID_Int_Events = GUID$("{67E9C73D-896A-440C-88DD-D0AC82AB7569}") ' Interface Name : IGalil ' ClassID : $CLSID_Galil Interface IDBind IGalil Member Call libraryVersion <1610743808> () As String Member Let address <1610743809> (In Rhs As String<0>) Member Call connection <1610743810> () As String Member Let timeout_ms <1610743811> (In retval As Long<0>) Member Get timeout_ms <1610743811> () As Long Member Call command <1610743813> (Opt In command As String<0>, Opt In terminator As String<1>, Opt In ack As String<2>, _ Opt In trim As Integer<3>) As String Member Call commandValue <1610743814> (Opt In command As String<0>) As Double Member Call programUpload <1610743815> () As String Member Call programDownload <1610743816> (Opt In program As String<0>) Member Call programUploadFile <1610743817> (Opt In file As String<0>) Member Call programDownloadFile <1610743818> (Opt In file As String<0>) Member Call arrayUpload <1610743819> (Opt In PB_name As String<0>) As Variant Member Call arrayDownload <1610743820> (In PB_array As Variant<0>, Opt In PB_name As String<1>) Member Call arrayUploadFile <1610743821> (Opt In file As String<0>, Opt In names As String<1>) Member Call arrayDownloadFile <1610743822> (Opt In file As String<0>) Member Call firmwareDownloadFile <1610743823> (Opt In file As String<0>) Member Call write <1610743824> (Opt In bytes As String<0>) As Long Member Call read <1610743825> () As String Member Call sources <1610743826> () As Variant Member Call recordsStart <1610743827> (Opt In period_ms As Double<0>) Member Call record <1610743828> (Opt In PB_method As String<0>) As Variant Member Call sourceValue <1610743829> (In record As Variant<0>, Opt In source As String<1>) As Double Member Call sourceUnits <1610743830> (Opt In source As String<0>) As String Member Call sourceDescription <1610743831> (Opt In source As String<0>) As String End Interface ' Interface Name : Int_Events ' ClassID : $CLSID_Event_Events = GUID$("{0FEFD506-A960-448A-97CD-2DC45FCC2091}") Class Class_IGalil_Events $CLSID_Event_Events As Event instance Msg as string, Rec as variant, Sts as long Interface IGalil_Events $IID_Int_Events Inherit IDispatch Method onInterrupt <0> (Byval PB_status As Long) Sts = PB_status End Method Method onMessage <1> (Byval message As String) Msg = acode$(message) End Method Method onRecord <2> (Byval record As Variant) Rec = record End Method End Interface End Class function pbmain() local GalilCont as IGalil, QR as string, IP as string, GalilDataRecord as variant, uSrcName as string, SrcValue as double, GalilContEvents as IGalil_Events IP = ucode$("192.168.1.151") let GalilCont = NEWCOM CLSID $CLSID_Galil object let GalilCont.address = IP GalilContEvents = CLASS "Class_IGalil_Events" EVENTS FROM GalilCont CALL GalilContEvents QR = ucode$("QR") uSrcName = ucode$("TIME") do OBJECT CALL GalilCont.record(QR) to GalilDataRecord OBJECT CALL GalilCont.sourceValue(GalilDataRecord, uSrcName) to SrcValue sleep 10 loop end function
Code:
Public Class Form1 WithEvents g As Galil.Galil Private r As Object Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load g = New Galil.Galil g.address = "" Timer1.Enabled = True End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick r = g.record("QR") Me.Text = g.sourceValue(r, "TIME").ToString End Sub End Class
Comment