我有一个方法可以将一个流复制到另一个流中。它非常简单和典型:
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次迭代?从未?
答案 0 :(得分:1)
我没有想到没有硬性和快速的答案。提供了Flush,因此您可以控制存储何时从内存有效地移动到流。因此,选择是你的,每次循环迭代都要做到最小化内存使用,不要频繁地做,以牺牲内存为代价来提高性能。
答案 1 :(得分:1)
取决于。
如果即使一个数据缓冲区有用,那么你可以在每次迭代时调用Flush
,否则你可以在每5次 th 上调用它。但是,如果部分数据无用,那么根本不打电话给Flush
是有道理的。
如果内存存在问题,那么更频繁地调用Flush
将是一件好事。