在经常使用线程写的情况下哪种方式更好?

时间:2011-03-23 16:50:03

标签: c# .net multithreading performance

我们需要以大约100毫秒的间隔将一些数据写入文件大约30分钟,然后等待一段时间,然后重复一遍。我们的应用程序是C#,。net 3.5应用程序。每次写入的数据都很小,小于1MB。现在我们从Threadpool获取一个线程,并在每次收到新数据时(以大约100ms的间隔)让该线程写入文件。

我认为还有另一种方法可以做到这一点。我们可以在开始时从Threadpool获取一个线程,并在整个写入会话期间保持该线程运行。当该线程完成写操作时,让它等待下一个信号从共享位置获取更新数据并再次写入。这种方式的缺点是我们需要同步共享数据对象,以确保在写入速度较慢时不会被新数据覆盖。那么它可能会减慢数据从另一个系统传输的通信速度。

我没有时间编写代码测试它们。你认为测试它们是否值得?或者显然有一种方式比另一种更好?

2 个答案:

答案 0 :(得分:2)

您可以使用生产者/消费者模式,因此线程可以始终锁定文件,而您无需打开和关闭FileStream。

这是一个例子:http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml

(在“更多监控方法”部分中)

答案 1 :(得分:0)

如果您认为您可能会对您的文件进行争用,那么单个线程编写者就是个好主意。否则,将单个操作分配给一个错误的线程imo没有真正的问题。