在复制C#中的流时,我什么时候进行explicity flush()



我有一种将一个流复制到另一个流中的方法。这很简单且典型:

public static void CopyStream(Stream source, Stream destination)
{
    byte[] buffer = new byte[32768];
    int read;
    while ((read = source.Read(buffer, 0, buffer.Length)) > 0)
    {
        destination.Write(buffer, 0, read);
    }
}

当目标流是FileStream时,我观察到该文件是在复制完成并关闭目标流之前创建的。我相信,复制流时会不时调用destination.Flush()在复制完成之前创建文件并开始写入内容,这将在我的系统中释放内存。

何时要进行此destination.Flush()呼叫?我的算法循环中的每个迭代?每次迭代?从不?

它取决于。

  • 您希望副本有多稳健?
  • 部分数据有多么有用?

如果即使是一个数据缓冲区也很有用,则可以在每次迭代中调用Flush,否则您可以在每5 th 上调用它。但是,如果部分数据没有用,则根本不致电Flush是有意义的。

如果内存是一个问题,则更频繁地调用Flush是一件好事。

我认为没有艰难而快速的答案。提供冲洗,因此您可以控制存储何时有效地从内存移到流。因此,选择是您的,每次循环迭代以最少的内存使用情况,以较高的性能为代价而少频繁。

相关内容

  • 没有找到相关文章

最新更新