基本上我想要的数据结构将镜像MSMQ,但会在内存中,因为它在一个进程中使用.通过镜像MSMQ,我的意思是你会将对象排队,然后你可以将对象出列或使用密钥检索它们.这是我最初的尝试.这个尝试的主要问题是Get by id会被频繁使用,因此队列最终会有很多"死"对象.
public class QueueDictionary<TKey, TValue>
{
private readonly Queue _queue = new Queue();
private readonly Dictionary<TKey, TValue> _dictionary = new Dictionary<TKey, TValue>();
private readonly object _syncRoot = new object();
public TValue Dequeue()
{
lock (_syncRoot)
{
TKey key = (TKey)_queue.Dequeue();
while (!_dictionary.ContainsKey(key))
key = (TKey)_queue.Dequeue();
return _dictionary[key];
}
}
public TValue Get(TKey key)
{
lock (_syncRoot)
{
TValue result = _dictionary[key];
_dictionary.Remove(key);
return result;
}
}
public void Enqueue(TKey key, TValue value)
{
lock (_syncRoot)
{
_dictionary.Add(key, value); …Run Code Online (Sandbox Code Playgroud)