我有一种将一个流复制到另一个流中的方法。这很简单且典型:
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
是一件好事。
我认为没有艰难而快速的答案。提供冲洗,因此您可以控制存储何时有效地从内存移到流。因此,选择是您的,每次循环迭代以最少的内存使用情况,以较高的性能为代价而少频繁。