3

我有一种方法可以将一个流复制到另一个流中。这是相当简单和典型的:

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);
    }
}

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

这个destination.Flush()电话什么时候打?我的算法循环中的每次迭代?每 N 次迭代?绝不?

4

2 回答 2

1

这取决于。

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

如果甚至一个数据缓冲区有用,那么您可以Flush在每次迭代时调用它,否则您可以在每 5调用它。但是,如果部分数据无用,那么根本不调用是有意义Flush的。

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

于 2012-10-19T09:19:06.317 回答
1

我不认为没有硬性和快速的答案。提供了刷新,因此您可以控制存储何时有效地从内存移动到流。所以选择是你的,每次循环迭代都执行一次以最小化内存使用,不那么频繁地执行可能以牺牲内存为代价获得更高的性能。

于 2012-10-19T09:17:30.937 回答