【问题标题】:which way is better in a frequently write case with thread?在使用线程频繁写入的情况下,哪种方式更好?
【发布时间】:2011-03-23 16:50:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net multithreading performance


    【解决方案1】:

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

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

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

    【讨论】:

    • 另外,如果你一次接收一点数据,你不需要一拿到数据就写。缓冲和不频繁地执行较大的写入可能更有效。
    【解决方案2】:

    如果您认为可能会争用写入文件,那么单线程编写器是个好主意。否则,将单个操作分派到其他线程 imo 没有真正的问题。

    【讨论】:

      猜你喜欢
      • 2012-07-17
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多