BlockingCollection
该集合是对泛型接口IProducerConsumerCollection实现的一个高级封装。其中有很多管道场景,即当你有一些操作需要使用之前计算的结果。
BlockingCollection支持如下功能:
- 分块
- 调整内部集合容量
- 取消集合操作
- 从多个块集合中获取元素
DEMO:在单线程的环境中使用通用字典与使用通用字典的性能
结论
可以发现使用ConcurrentDictionary写操作比使用锁的通用字典要慢很多,而读操作则更快些。因此如果对字典需要大量的线程安全的读操作,则ConcurrentDictionary是更好的选择。
图片
代码
class Program
{
const string Item = "";
public static string CurrentItem;
static void Main(string[] args)
{
var concurrentDicrionary=new ConcurrentDictionary<int ,string>();
var dictionary=new Dictionary<int ,string>();
var sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000000; i++)
{
lock(dictionary)
{
dictionary[i]=Item;
}
}
sw.Stop();
Console.WriteLine("写dictionary的时间"+sw.Elapsed);
sw.Restart();
for (int i = 0; i < 1000000; i++)
{
concurrentDicrionary[i] = Item;
}
sw.Stop();
Console.WriteLine("写并发集合concurrentDicrionary的时间:" + sw.Elapsed);
sw.Restart();
for (int i = 0; i < 1000000; i++)
{
lock(dictionary)
{
CurrentItem = dictionary[i];
}
}
sw.Stop();
Console.WriteLine("读dictionary的时间" + sw.Elapsed);
sw.Restart();
for (int i = 0; i < 1000000; i++)
{
CurrentItem=concurrentDicrionary[i];
}
sw.Stop();
Console.WriteLine("读并发集合concurrentDicrionary的时间:" + sw.Elapsed);
Console.ReadKey();
}
}