Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ConcurrentQueue与Queue+;锁_C# - Fatal编程技术网

C# ConcurrentQueue与Queue+;锁

C# ConcurrentQueue与Queue+;锁,c#,C#,我必须实现一个消费者一个生产者的标准算法。我可以使用Queue和两个lock语句轻松地实现它。或者我可以使用ConcurrentQueue。什么更好 如果使用了Queue+lock,那么我可以优化“多次添加/检索”,因为我可以lock一次,然后Add多次 一般情况下,ConcurrentQueue或Queue+lock的速度更快,差异有多大?当然,ConcurrentQueue是最具前瞻性的方式,但我不想失去很多性能,因为我在HFT交易应用程序中使用它。来自: 实现了并发堆栈、队列和包类 在内部

我必须实现一个消费者一个生产者的标准算法。我可以使用
Queue
和两个
lock
语句轻松地实现它。或者我可以使用
ConcurrentQueue
。什么更好

如果使用了
Queue+lock
,那么我可以优化“多次添加/检索”,因为我可以
lock
一次,然后
Add
多次

一般情况下,
ConcurrentQueue
Queue+lock
的速度更快,差异有多大?当然,
ConcurrentQueue
是最具前瞻性的方式,但我不想失去很多性能,因为我在HFT交易应用程序中使用它。

来自:

实现了并发堆栈、队列和包类 在内部使用链接列表。这会降低它们的内存效率 比非当前的
堆栈
队列
类更好,但对于 并发访问,因为链表有助于解除锁定或 低锁实现

换句话说,很难定义一般情况,更不用说预测性能的差异


这取决于集合的大小和使用情况。如果有足够的并发访问,性能会更好,内存消耗会更差。

首先,性能与CPU数量有关。在某些抽象模式下很难评估多线程应用程序的性能。在您的环境中进行测量怎么样?我可以给你数字,证明你想在我的机器上做什么。