我有并发字典来保存一些位图,我已经定义如下(在VB.net中):
Private m_colImages As New ConcurrentDictionary(Of String, Bitmap)
在声明它的类中,我有一个函数将项添加到此集合中,如下所示:
Public Function AddImageToCache(ByVal lensID As String, ByVal image As Bitmap) As Boolean
Try
If (m_colImages.TryAdd(lensID, image)) Then
Return True
Else
Return False
End If
Catch ex As Exception
MessageBox.Show("Unexpected exception: " & ex.Message)
Return False
End Try
End Function
我需要做的只是在字典中保存大约4个对象(最新添加的对象)。因此,如果集合中已有4个条目,并且添加了另一个条目,我想删除最旧的条目并将新的条目添加到字典中。但是我没有在添加等时存储时间。所以不确定如何做到这一点。由于快速键/值对查找,我选择使用字典。我没有必要对它进行排序等等。所以不确定我是否应该使用List而不是按索引删除。
任何帮助和代码段都将不胜感激!谢谢。
答案 0 :(得分:1)
自定义解决方案,设置了限制,最后的项目都是剩下的。
Public Class Que : Inherits ConcurrentQueue(Of QueItem)
Public Overloads Sub Push(item As QueItem)
If Me.Count = 4 Then
Me.TryDequeue(Me.ElementAt(Me.Count - 1))
MyBase.Enqueue(item)
Else
MyBase.Enqueue(item)
End If
End Sub
End Class
Public Class QueItem
Public Property Key As String
Public Property Value As Image
End Class
用法:
Dim q As New Que
For i As Integer = 1 To 8
q.Push(New QueItem With {.Key = i.ToString, .Value = {new image})
Next
查询:
Dim query = From qi As QueItem In q
Where qi.Key = "AB123"
Dim img = query.FirstOrDefault.Value