首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用C#的多线程系统中,哪一个是更好的媒体缓冲区管理体系结构?

在使用C#的多线程系统中,哪一个是更好的媒体缓冲区管理体系结构?
EN

Stack Overflow用户
提问于 2013-01-08 14:50:51
回答 1查看 114关注 0票数 1

我有一个C#系统,其中服务器应用程序逐帧接收视频,它的职责是将此帧发送到所有连接的客户端。我有一个线程,它做的工作,下载帧和存储。和其他客户端连接线程将读取这些存储的帧,并将它们发送到客户端。现在我的疑问是,在多线程环境中,哪种方法是存储框架的最佳方式。

我计划了两种方法。一种是我使用Queue类,使用enque-deque,通过使用lock进行包装;另一种方法是将frame转储到一个文件中,该文件由所有读写线程以共享模式打开。哪一种会更注重性能?有没有其他更好的方法来做到这一点?

我对上述两种方法的一些假设如下所示。1)锁定队列会降低性能2)不需要锁定文件IO,因为文件是在共享模式下打开的,并且具有独立可视的文件指针。3)在队列接近的情况下,需要定义队列长度来管理RAM中的内存限制。而这些内存限制的约束需要更多的技巧来管理其他情况,如队列溢出。3)为了将相同的帧从队列发送到多个客户端,我需要查找deque的alter。4)文件IO将比队列管理慢。

附注:内存映射文件IO能否帮助我在方案中实现更高的性能?

请提供任何类型的优点/缺点/评论。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-08 15:31:21

我认为两者都应该可以工作-我真的怀疑锁定和/或从文件系统读取/写入的开销是否可以与流式输入/输出数据的速率相媲美。

他说,从理论上讲,选择实际上取决于你能以多快的速度流出你的数据,而不是你可以流入的速率。如果两者几乎相同,那么您可以使用内存结构,因为您的队列不太可能保持快速填满(因为排队和出列几乎以相同的速度发生)。

最后,您可以始终选择一种混合方法,这将给您带来两全其美的优势。你可以使用内存中的队列,但队列元素不需要是实际的视频帧-它可以是一个数据结构,它将告诉你数据在哪里(在内存中或在文件中)。这样,您的排队/排队逻辑就独立于数据存储了。实际的存储代码可以根据内存可用性决定存储在哪里-例如,您最多可以在内存中存储50帧,之后的帧将存储到文件中(一个或多个)。当内存中的帧被传输时,该插槽将变为空的,并且下载的下一帧可以到达那里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14209653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档