我有一个 C# 系统,其中服务器应用程序逐帧接收视频,它的职责是将此帧发送到所有连接的客户端。我有一个线程来完成下载帧和存储的工作。并且其他客户端连接线程将读取这些存储的帧并将它们发送给客户端。现在我怀疑这是为多线程环境存储帧的最佳方式。
我计划了两种方法。一个是我使用 Queue 类并通过锁定包装来使用 enque-deque,另一个方法是将帧转储到一个文件中,该文件由所有读写线程以共享模式打开。哪个更注重性能?有没有其他更好的方法来做到这一点?
我对上述两种方法的一些假设如下。1) 锁定队列会降低性能 2) 文件 IO 不需要锁定,因为文件以共享模式打开并且具有独立的文件指针。3)在队列接近的情况下,需要定义队列长度以管理RAM中的内存限制。并且这些内存限制的约束需要更多的技术来管理队列溢出等其他情况。3)要将相同的帧从队列发送到多个客户端,我需要寻找双端队列的改变。4) 文件 IO 会比队列管理慢。
PS 内存映射文件 IO 能否帮助我在我的场景中实现更高的性能?
请提供任何类型的优点/缺点/评论。谢谢。