次のシナリオで適切なスレッド セーフ コレクション (同時コレクション) を探しています。
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;
}
ありがとう