我何时在C#中复制流时明确表示Flush()?

时间:2012-10-19 09:11:02

标签: c# .net stream filestream

我有一个方法可以将一个流复制到另一个流中。它非常简单和典型:

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()来电何时完成?我的算法循环中的每次迭代?每N次迭代?从未?

2 个答案:

答案 0 :(得分:1)

我没有想到没有硬性和快速的答案。提供了Flush,因此您可以控制存储何时从内存有效地移动到流。因此,选择是你的,每次循环迭代都要做到最小化内存使用,不要频繁地做,以牺牲内存为代价来提高性能。

答案 1 :(得分:1)

取决于。

  • 您希望副本有多强大?
  • 部分数据有用吗?

如果即使一个数据缓冲区有用,那么你可以在每次迭代时调用Flush,否则你可以在每5次 th 上调用它。但是,如果部分数据无用,那么根本不打电话给Flush是有道理的。

如果内存存在问题,那么更频繁地调用Flush将是一件好事。