Problem med minnes läckage (Visual Basic)
Hej
Jag håller på och skriver ett litet program i visual studio (visual basic). jag har skapat en egen class som jag kallar Data av vilken jag vill skapa objekt för att sedan länka i en lista.
dvs Jag skapar ett ex antal objekt av typen Data och stoppar in dom i en "Microsoft.VisualBasic.Collection" som jag kallar DataColl, och när jag tycker att listan är lagom lång så tar jag bort ett objekt för varje nytt jag stoppar in.
Men när jag låter programet gå och jag kikar i Windows Task Manager ser jag att programmet tar mer och mer i minne för varje objekt som läggs till, har försökt se till att jag tar bort allt i objektet innan jag tar bort det från DataColl men endå slukar det minn
Här kommer min class Data och ett exempel på hur jag använder det:
Public Class Data
Private UARFCN As New List(Of Integer)
Private RXlev As New List(Of Integer)
Private SCRcode As New List(Of Integer)
Private MNC As New List(Of Integer)
Private Signature As New List(Of Integer) 'UARFCN + SCRcode
'Private Timestamp As New List(Of DateTime)
Private Timestamp As DateTime
Private empty_obj As Boolean
'===============New Data=============================
Public Sub Add(ByVal uarf As Integer, ByVal _mnc As Integer, ByVal SCR As Integer, ByVal rx As Integer)
UARFCN.Add(uarf)
MNC.Add(_mnc)
SCRcode.Add(SCR)
RXlev.Add(rx)
'Timestamp.Add(time)
Signature.Add(uarf + SCR)
empty_obj = False
End Sub
Public Sub AddTime(ByVal time As DateTime)
Timestamp = time
End Sub
Public Sub ObjectEmpty(ByVal var As Boolean)
empty_obj = var
End Sub
'===============Return functions=====================
Public Function GetSignature(ByVal i)
Return Signature(i)
End Function
Public Function GetSCRcode(ByVal i)
Return SCRcode(i)
End Function
Public Function GetUARFCN(ByVal i)
Return UARFCN(i)
End Function
Public Function GetMNC(ByVal i)
Return MNC(i)
End Function
Public Function SCRcodeExist(ByVal SCR)
Return SCRcode.Contains(SCR)
End Function
Public Function UARFCNexist(ByVal uarf)
Return UARFCN.Contains(uarf)
End Function
Public Function Signatureexist(ByVal sig)
Return Signature.Contains(sig)
End Function
Public Function GetRXlev_from_signature(ByVal sig)
If Signature.Contains(sig) Then
Return RXlev(Signature.IndexOf(sig))
Else
Return -115
End If
End Function
Public Function GetNumberOfDataPoints()
Return Signature.Count
End Function
Public Function Empty()
Return empty_obj
End Function
'===============Clean up========================
Public Sub Clear()
UARFCN.Clear()
RXlev.Clear()
SCRcode.Clear()
MNC.Clear()
Signature.Clear()
End Sub
End Class
Sedan lägger jag till och tar bort objekt på följande sätt,
Public DataColl As New Microsoft.VisualBasic.Collection()
==========En bit ur den funktion som hanterar datan========
Dim temp_data As New Data
If DataColl.Count = 20 Then
DataColl.Item(20).Clear()
DataColl.Remove(20)
DataColl.Add(temp_Data, , 1) 'Lägger till det temporära objektet först i listan
Else
DataColl.Add(temp_Data, , 1)
End If
=====================================
Om någon kan se något uppenbart fel säg gärna till, har försök leta runt på nätet men inte hittat något
Tack på förhand
Niklas