有一个字典对象只能容纳几个项目?

时间:2014-03-30 02:26:24

标签: .net vb.net

我有并发字典来保存一些位图,我已经定义如下(在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而不是按索引删除。

Picture of dictionary flow

任何帮助和代码段都将不胜感激!谢谢。

1 个答案:

答案 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