Joh*_*ohn 2 c# concurrent-queue
我正在阅读这个问题并注意到 OP 正在迭代一个列表以将项目排队到 ConcurrentQueue 中。
ConcurrentQueue<TaskClass> cq = new ConcurrentQueue<TaskClass>();
for (int x = 0; x < TaskList.Count; x++)
cq.Enqueue(TaskList[x]);
Run Code Online (Sandbox Code Playgroud)
这是必要的吗?
有没有办法:
您会注意到它ConcurrentQueue<T>提供了一个接受 an并复制其内容的构造函数IEnumerable<T>,如下所示:
ConcurrentQueue<TaskClass> queue = new ConcurrentQueue<TaskClass>(TaskList);
Run Code Online (Sandbox Code Playgroud)
为什么这比将每个项目一个一个地入队更快?因为作为构造函数,它不受类型的线程安全保证的约束,因此可以在不取出任何锁的情况下添加项目(此外,如果您查看源代码,您会发现 Microsoft 故意绕过某些volatile字段读取和出于性能原因而写)。
请参阅参考来源以获取证明。
PS除非您在紧密循环中创建大型并发队列,否则您不太可能观察到明显的性能差异,但值得记住的是,如果需要,复制构造函数就在那里。
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |