如何在多个消费者中使用TextWriter?

时间:2012-03-06 10:12:42

标签: c# thread-safety producer-consumer

我有一个BlockingCollection,这个集合由不同线程上的多个生成器函数填充。

我的消费者功能将集合项写入文件但不可扩展,因为只有一个消费者。

我需要多生产者和多用户实施。

我可以在Write方法之前使用TextWriter.Synchronized()并锁定,但它可能会浪费单个TextWriter的相同执行时间。

1 个答案:

答案 0 :(得分:0)

你的文本编写者可能会受到磁盘IO速度的影响,因此多媒体处理器很容易超过硬盘驱动器。拥有多个编写器并不能解决这个问题,因为磁盘争用可能会使其变得更糟。

假设您已经实现了有效的wiriter,最好的解决方案是在队列中拥有最大数量的项目,并且只接受IO是这里的瓶颈。

如果您需要更快,获得更快的磁盘(固态或RAID等),或者您可以查看二进制文件并使用BinaryWriter向它们写入内容。或者当你真的需要最后一滴速度时,可以使用structs and marshall它们。如果您想将文件移动到其他平台,则存在风险。

编辑:忘了protobuf.net,这是我写入和读取数据到磁盘的首选解决方案。它是二进制的,快速且易于使用。

关心Gert-Jan