我正在为以下场景寻找正确的线程安全集合(并发集合):
我可能有来自生成 GUID 的外部来源的请求(因此它是唯一且非重复的)。我需要存储(比如最后 100 个请求)并检查是否传递了重复的 GUID。由于某些限制,我可能无法保存超过 100 个左右的所有 GUID。
现在的问题是,当在服务中使用这种机制时,它必须绑定到 100 个项目,并且基于 GUID 的搜索至关重要。
我决定使用,ConcurrentDictionary
但我怀疑这是一个好的决定,因为我可能会在使用完 100 个插槽后更改密钥。当字典已满时,我可能会找到一个很好的机制来替换最旧的请求。
任何想法都非常感谢。
提供了一个代码片段来显示我的不完整实现
public static ConcurrentDictionary<string, TimedProto> IncidentsCreated = new ConcurrentDictionary<string, TimedProto>(20, 100);
private static bool AddTo_AddedIncidents(proto ReceivedIncident)
{
try
{
int OldestCounter = 0;
DateTime OldestTime = DateTime.Now;
if (IncidentsCreated.Count < 100)
{
TimedProto tp = new TimedProto();
tp.IncidentProto = ReceivedIncident;
tp.time = DateTime.Now;
IncidentsCreated.AddOrUpdate(ReceivedIncident.IncidentGUID, tp,
(s,i) => i);
return true;
}
else //array is full, a replace oldest mechanism is required
{
}
return true;
}
catch (Exception ex)
{
LogEvent("AddTo_AddedIncidents\n"+ex.ToString(), EventLogEntryType.Error);
return false;
}
}
public struct proto
{
public string IncidentGUID;
//other variables
}
public struct TimedProto
{
public proto IncidentProto;
public DateTime time;
}
谢谢