Я рассматриваю замену потокового ввода-вывода в нашем приложении на System.IO.Pipelines, чтобы избежать ненужного выделения памяти (сначала рассматривался RecyclableMemoryStream, но, похоже, он больше не поддерживается).Но в некоторых местах мне все еще приходится использовать Stream из-за интерфейса, навязанного внешней библиотекой.Поэтому моему PipeWriter нужно будет обернуть свои данные в поток.
Я не нашел много на эту тему, но нашел предложение использовать шаблон декоратора ( C # Stream Pipe (Stream Spy) ) в ответе на другой вопрос.Я не уверен, что было бы правильным скрывать конвейеры за оболочкой потока, но не могу найти ничего другого, что позволило бы мне передавать данные в поток.Я что-то упустил?
ОБНОВЛЕНИЕ.Вот пример использования библиотеки с открытым исходным кодом SSH.NET для загрузки файла на FTP-сервер (https://gist.github.com/DavidDeSloovere/96f3a827b54f20d52bcfda4fe7a16a0b):
using (var fileStream = new FileStream(uploadfile, FileMode.Open))
{
Console.WriteLine("Uploading {0} ({1:N0} bytes)", uploadfile, fileStream.Length);
client.BufferSize = 4 * 1024; // bypass Payload error large files
client.UploadFile(fileStream, Path.GetFileName(uploadfile));
}
Обратите внимание, что мы открываем FileStream для чтения файла и затем передаем ссылку Stream на SftpClientМогу ли я использовать System.IO.Pipelines здесь, чтобы уменьшить выделение памяти? Мне все еще нужно будет предоставить Stream для SftpClient.