Я видел много примеров реализации CopyStream, но у меня есть вопрос о размере буфера при копировании потоков.
Пример одной из реализаций CopyStream:
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)?
- Насколько разныеразмер буфера влияет на производительность, использование памяти и т. д.?
Смежные вопросы:
Файл IO с потоками - лучший размер буфера памяти - хороший ответ файла IO.Но как насчет копирования в памяти?
Мой случай:
Существует MemotyStream
, который я создаю с использованием ClosedXML workbook.SaveAs(memoryStream);
, и он выделяетсяогромное количество памяти в управляемой куче.Я посмотрел источники и обнаружил, что есть метод CopyStream, который использует размер буфера 8 * 1024.Может ли изменение этого размера как-то уменьшить использование памяти?
Примечание: Поток занимает почти 1 ГБ памяти.