public class MonitorLocalStore
{
private Dictionary<int, Queue<MonitorData>> cache;
private static object syncObj = new object();
//监控元数据ID
private string metaDataID;
public DateTime CreateTime;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="metaDataID">监控元数据ID</param>
public MonitorLocalStore(string metaDataID)
{
this.metaDataID = metaDataID;
cache = new Dictionary<int, Queue<MonitorData>>();
for (int i = 0; i < 60; i++)
{
cache.Add(i, new Queue<MonitorData>());
}
CreateTime = DateTime.Now;
}
public void Add(MonitorData value)
{
if (!cache.ContainsKey(value.Time.Minute))
{
throw new Exception("Cannot find Time slot: " + value.Time.ToString() + ", Current slots: " + string.Join(",", cache.Keys));
}
cache[value.Time.Minute].Enqueue(value);
}
public void Add(IEnumerable<MonitorData> valueSet)
{
Parallel.ForEach(valueSet, (i) =>
{
cache[i.Time.Minute].Enqueue(i);
}
);
}
public List<MonitorData> Get(params int[] scope)
{
var valueSet = new List<MonitorData>();
foreach (var item in scope)
{
while (cache[item].Count > 0)
{
MonitorData data = cache[item].Dequeue();
if (data != null)
{
valueSet.Add(data);
}
}
//valueSet.AddRange(cache[item]);
cache.Remove(item);
cache.Add(item, new Queue<MonitorData>());
}
return valueSet;
}
/// <summary>
/// 获取本地缓存的总容量
/// </summary>
/// <returns>本地缓存的总容量</returns>
public long GetCapcity()
{
var length = 0;
foreach (var item in cache)
{
length += item.Value.Count;
}
return length;
}
public void Ecvit(params int[] scope)
{
lock (syncObj)
{
foreach (var item in scope)
{
cache[item] = new Queue<MonitorData>();
}
}
}
public Dictionary<int, Queue<MonitorData>> GetCache()
{
return cache;
}
}
来源: http://www.cnblogs.com/tianqing/p/7425696.html