2016-09-16 61 views
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 

有一種簡單的方法來消除從結構的對象?我寧願避免創建一個空副本,然後複製活動的副本,然後摧毀舊副本,如果可以的話。

+0

您的結構實際上不是一個列表或集合。這只是關於單個對象的信息。所以,除非你沒有發佈一些代碼,否則你需要做的就是用'dict_tracking.Remove(Tracking.hash)'從字典中移除對象' – FloatingKiwi

+0

嗯,我已經按照你的建議使用Remove方法,但是我的程序需要的內存在新對象進入時不斷增長,所以它看起來並沒有真正的去除它們,除非有其他事情正在發生,我錯過了。是否有任何簡單的方法來檢查結構的內容,以便我可以看到其中的內容來確認兩種方式? –

+0

結構與類非常相似。他們不是集合。所以你的只包含5個字符串。使用調試器並查看dict_tracking集合中的內容。你的內存泄漏在應用程序的其他地方。嘗試使用jetbrains dotMemory試用評估或發佈剩餘的代碼。 – FloatingKiwi

回答

0

你不需要。

您的結構基本上只是一個包含一些關於您的對象的數據的容器。當你的對象從字典中被移除時,這個容器就會被移除。所以不需要手動從中刪除數據。

對於強制性汽車比喻: 當您的汽車在其中一個巨大的印刷機中被銷燬時,您不需要清空汽車的菸灰缸。