线程安全Buffer
public ConcurrentQueue<Ai> concurrentQueue = new ConcurrentQueue<Ai>();
//取出数据
Ai ai;
while (concurrentQueue.TryDequeue(out ai))
{
//进行操作
}
//存入数据
concurrentQueue.Enqueue(ai);
字典,当数据量特别大的时候,性能很强,为了线程安全,删除时不是真删除
Dictionary<int, ProductionDataCache> Datas = new Dictionary<int, ProductionDataCache>();
//添加修改数据
ProductionDataCache productionDataCache;
if (Datas.TryGetValue(siteInfo.SiteId, out productionDataCache))
{
//存在修改
}
else
{
//不存在添加
Datas.Add(productionData.SiteId, productionData);
}
//删除数据,为了线程安全,不直接删除数据,直接对数据进行标记
ProductionDataCache productionDataCache;
if (Datas.TryGetValue(siteId, out productionDataCache))
{
productionDataCache.IsDelete = true;
}
//更新数据
ProductionDataCache productionDataCache;
//需要有数据才可以数据
if (Datas.TryGetValue(siteId, out productionDataCache))
{
Datas[key] = newProductionDataCache;
}
else
{
Datas.Add(key, newProductionDataCache);
}
字典遍历
Dictionary<string, int> list = new Dictionary<string, int>();
list.Add("d", 1);
//3.0以上版本
foreach (var item in list)
{
Console.WriteLine(item.Key + item.Value);
}
//KeyValuePair<T,K>
foreach (KeyValuePair<string, int> kv in list)
{
Console.WriteLine(kv.Key + kv.Value);
}
//通过键的集合取
foreach (string key in list.Keys)
{
Console.WriteLine(key + list[key]);
}
//直接取值
foreach (int val in list.Values)
{
Console.WriteLine(val);
}
可观察到的集合,WPF前后台绑定时,要想数据更改前台自动更改,需要使用ObservableCollection
数据更新前台自动更新
ObservableCollection<ProductionData>
set { _DisplayId = value; NotifyOfPropertyChange(() => DisplayId);