【问题标题】:Buffered StreamWriter for writing over a long period of time用于长时间写入的缓冲 StreamWriter
【发布时间】:2017-01-22 20:35:15
【问题描述】:

我有一个程序将运行很长时间(数小时),并定期将输出写入文本文件。

我正在寻找使用 TextWriter 实现来写入文件,我担心在整个操作期间保持文件锁定打开可能会出现问题。

第一个问题:长时间保持对文件的流打开是否会出现性能问题(或其他类型)?

如果是这样,StreamWriter(使用文件名构造函数打开)是否会定期为我管理打开和关闭文件,或者它会在文件存在期间保持打开状态?

最后,是否有内置选项来处理这些更长时间的写入?还是我需要自定义 Writer/Stream 实现?

【问题讨论】:

    标签: c# file-io streamwriter textwriter


    【解决方案1】:

    我个人会使用其中一个 File.Appendxxx 例程,它打开文件,附加数据,然后再次关闭它。

    如果我写的速度太快以至于所有这些打开和关闭的成本太高,那么我添加某种基于内存的队列并定期刷新它。

    如果您正在执行基于文本的日志记录,您可能会查看用于 .NET 的众多日志记录框架之一,它可以为您完成此类工作以及旋转文件名等工作。

    StreamWriter / FileStream 等通常会保持文件处于打开状态,直到您处理它们。

    【讨论】:

      【解决方案2】:

      不建议无限期打开文件以写入文件,因为这可能会在您需要备份文件、编辑文件、读取文件时导致问题,或者即使系统在文件运行时崩溃写入文件的过程不可避免地会损坏数据。

      Will 的回答确实提供了在需要时打开和附加文件的解决方案。这里的重点是,如果文件没有被写入 24/7,那么你没有理由不关闭它。

      从需要 24/7 全天候打开的文件的意义上直接回答您的问题。我会使用异步方法使用任务写入文件。这样,您就可以调用另一个任务来编写文件的备份,比如每天。备份文件将允许您查看生产文件的信息。

      【讨论】:

        猜你喜欢
        • 2014-04-20
        • 2014-05-14
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        相关资源
        最近更新 更多