オブジェクトに関するデータを含む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