我看到了很多CopyStream实现的例子,但是当我们复制流时我有关于缓冲区大小的问题。
样品CopyStreams实现一:当复制流时缓冲区大小的差异
private void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
// write the required bytes
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
的问题是:
- 什么缓冲器长度应为(我见过256,8 * 1024, 32768)?
- 不同的缓冲区大小如何影响性能,内存使用情况等?
相关的问题:
File IO with Streams - Best Memory Buffer Size - 漂亮的文件IO答案。但是在内存复制方面呢?
我的情况:
有MemotyStream
我创建使用ClosedXMLworkbook.SaveAs(memoryStream);
和它分配在托管堆中的内存量巨大。我查看了源代码,发现有使用8 * 1024缓冲区大小的CopyStream方法。以某种方式更改此大小可以减少内存使用量?
注意:流需要几乎1Gb的内存。
就你而言,可能大部分内存是由内存流使用而不是复制过程?值得检查,因为对于数百MB的数据流,8KB缓冲区很小。 – 2012-02-18 12:37:50
XML文档的大小(写入磁盘时)是多少?如果它是1GB,那么你应该预期内存流为1GB ......或者你认为数据如果不是 - 那么 - (管理的)内存呢? – thoean 2012-02-18 13:21:50
@Markus Excel文件本身只需20MB。这绝对是一个不好的迹象。 – 2012-02-18 13:33:46