我看到了很多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