0
我有一個VB.Net結構,其中包含一堆關於對象的數據。對象被添加到這個結構中,並且往往有一個有限的生命,所以隨着時間的推移,我的結構最終會包含已經過期的對象。VB.Net:從結構中刪除項目
在他們的一生中,他們的一些屬性發生了變化,所以我有一本字典,以便我可以輕鬆地找到適當的對象,以便我需要更新它。
但是,當一個對象到期時,我想從結構中刪除它。我可以從字典中刪除它,但無法弄清楚如何從結構中刪除它。
這裏是我的結構:
Public Class Form1
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Main()
End Sub
Public Structure ObjectList
Public hash As String
Public xPosition As String
Public yPosition As String
Public zPosition As String
Public speed As String
Public Sub New(ByVal _hash As String, ByVal _xposition As String, ByVal _yposition As String, ByVal _zposition As String, ByVal _speed As String)
hash = _hash
xPosition = _xposition
yPosition = _yposition
zPosition = _zposition
speed = _speed
End Sub
End Structure
Sub Main()
Dim Tracking As ObjectList
Dim dict_Tracking As New Dictionary(Of String, ObjectList)
' Define a new object
Tracking.hash = "4D010AEF"
Tracking.xPosition = "3.5"
Tracking.yPosition = "7.2"
Tracking.zPosition = "8.1"
Tracking.speed = "16.2"
' Add hash to dictionary so that we can find it easily without searching entire dictionary
dict_Tracking.Add(Tracking.hash, Tracking)
End Sub
End Class
有一種簡單的方法來消除從結構的對象?我寧願避免創建一個空副本,然後複製活動的副本,然後摧毀舊副本,如果可以的話。
您的結構實際上不是一個列表或集合。這只是關於單個對象的信息。所以,除非你沒有發佈一些代碼,否則你需要做的就是用'dict_tracking.Remove(Tracking.hash)'從字典中移除對象' – FloatingKiwi
嗯,我已經按照你的建議使用Remove方法,但是我的程序需要的內存在新對象進入時不斷增長,所以它看起來並沒有真正的去除它們,除非有其他事情正在發生,我錯過了。是否有任何簡單的方法來檢查結構的內容,以便我可以看到其中的內容來確認兩種方式? –
結構與類非常相似。他們不是集合。所以你的只包含5個字符串。使用調試器並查看dict_tracking集合中的內容。你的內存泄漏在應用程序的其他地方。嘗試使用jetbrains dotMemory試用評估或發佈剩餘的代碼。 – FloatingKiwi