缓冲的StreamWriter可以在很长一段时间内写入

时间:2016-09-14 22:25:18

标签: c# file-io streamwriter textwriter

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

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

第一个问题:是否存在性能问题(或其他类型),以便在较长时间内保持流对文件开放?

如果是这样,StreamWriter(使用文件名构造函数打开)是否会以常规缓冲方式管理打开和关闭文件,还是会在文件存在期间保持文件打开状态?

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

2 个答案:

答案 0 :(得分:0)

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

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

如果您正在进行基于文本的日志记录,您可能会看到.NET的一个无数日志记录框架,它可以为您执行此类操作,以及旋转文件名等等。

StreamWriter / FileStream等通常会将文件保持打开状态,直到您将其丢弃为止。

答案 1 :(得分:0)

建议无限期打开文件以便将其写入,因为当您需要备份文件,编辑文件,读取文件或者系统崩溃时,这可能会导致问题写入文件的过程不可避免地破坏了数据。

答案是否会提供在需要时打开和附加文件的解决方案。这里的要点是,如果文件没有全天候写入,则没有理由不关闭它。

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